node.js - Jest fungerer ikke med fs/promises typescript


Jeg prøver å legge til jest i TypeScript-prosjektet mitt for testing, men når jeg kjører jest, fortsetter det å gi meg feilen

  ● Test suite failed to run

Cannot find module 'fs/promises' from 'src/path/to/file'

    Require stack:
      src/path/to/file
      test/test.ts

    > 3 | import fsp from 'fs/promises';

      at Resolver.resolveModule (node_modules/jest-resolve/build/resolver.js:311:11)
      at Object.<anonymous> (src/path/to/file.ts:3:1)

Selve programmet kjører fint, men hver gang jeg prøver å kjøre jest på det, støter det på dette problemet. Jeg har prøvd å legge til jest.mock('fs');, som ikke hjalp, og å legge til jest.mock('fs/promises'); gir samme feil i testfilen.

Jeg har lest at visse versjoner av Node ikke støtter 'fs/promises' og i stedet trenger require('fs').promises, som jeg har prøvd og fortsatt ikke fungerer (jeg bruker Node-versjon 12).

Hvordan kan jeg konfigurere jest for å kunne laste 'fs/promises'? Jeg har inkludert min jest.config.js-fil nedenfor:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  testPathIgnorePatterns: [
    '/node_modules/',
    '/out/',
  ],
  moduleDirectories: [
    '.',
    'node_modules'
  ],
  moduleFileExtensions: [
    'ts',
    'tsx',
    'js',
    'jsx'
  ]
}

Svar #1

Det viser seg at Jest tolker 'fs/promises' som en mappe i filsystemet, noe som er feil da dette er et API fra fs-modulen. For å fikse dette, legg ganske enkelt til

moduleNameMapper: {
  "fs/promises": "<rootDir>/node_modules/fs-extra/lib/fs"
}

til jest.config.js for å fortelle Jest å mappe modul 'fs/promises' til filen <rootDir>/node_modules/fs-extra/lib/fs, eller hvor enn fs-modulen er definert i filsystemet ditt.

Relaterte artikler