„jest.spyOn()“ funktioniert bei importierten Modulen, ist jedoch bei importierten Funktionen desselben Moduls fehlgeschlJavaScript

Javascript-Forum
Guest
 „jest.spyOn()“ funktioniert bei importierten Modulen, ist jedoch bei importierten Funktionen desselben Moduls fehlgeschl

Post by Guest »

Was funktioniert und was nicht?
Der Unit-Test

Code: Select all

// my-func.test.js
import { jest } from '@jest/globals';
import { myFunc } from './my-func.js';
import fs from 'node:fs';

const mock = jest.fn().mockReturnValue({isDirectory: () => true});
jest.spyOn(fs, 'statSync').mockImplementation(mock);

it('should work', () => {
expect(myFunc('/test')).toBeTruthy();

expect(mock).toHaveBeenCalled();
});
Die Arbeitsversion

Code: Select all

// my-func.js
import fs from 'node:fs';
// import { statSync } from 'node:fs';

export function myFunc(dir) {
const stats = fs.statSync(dir, { throwIfNoEntry: false });
// const stats = statSync(dir, { throwIfNoEntry: false });
return stats.isDirectory();
}
Die fehlerhafte Version
Beachten Sie den unterschiedlichen Importmechanismus. Jest schlägt fehl mit:

Eigenschaften von undefiniert können nicht gelesen werden (liest „isDirectory“).
TypeError: Eigenschaften von undefiniert können nicht gelesen werden (liest „isDirectory“). )

Code: Select all

// my-func.js
// import fs from 'node:fs';
import { statSync } from 'node:fs';

export function myFunc(dir) {
// const stats = fs.statSync(dir, { throwIfNoEntry: false });
const stats = statSync(dir, { throwIfNoEntry: false });
return stats.isDirectory();
}
Die Frage
Wie kann ich statSync ausspionieren oder verspotten mit dem Import { statSync } von 'node:fs';< /code>-Syntax, oder ist das überhaupt möglich?
Umgebung
Beachten Sie, dass der Test im ESModule-Modus ausgeführt wird.

Code: Select all

# package.json
{
"type": "module",
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
...
},
"devDependencies": {
"@eslint/js": "^9.17.0",
"@jest/globals": "^29.7.0",
"globals": "^15.14.0",
"jest": "^29.7.0",
...
},
...
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post