Ich fange an zu denken, dass dies nicht möglich ist, aber ich möchte trotzdem fragen.
Ich möchte testen, ob eines meiner ES6-Module ein anderes ES6-Modul auf eine bestimmte Weise aufruft. Mit Jasmine ist das super einfach -
Der App-Code:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
Und der Testcode:
//myModule-test.js
import myModule from '../myModule';
import dependency from '../dependency';
describe('myModule', () => {
it('calls the dependency with double the input', () => {
spyOn(dependency, 'doSomething');
myModule(2);
expect(dependency.doSomething).toHaveBeenCalledWith(4);
});
});
Was ist das Äquivalent zu Jest? Ich denke, das ist so einfach zu tun, aber ich habe mir die Haare ausgerissen, um es herauszufinden.
Am nächsten komme ich, indem ich das import
s durch require
s ersetze und es in die Tests / Funktionen verschiebe. Beides möchte ich nicht tun.
// myModule.js
export default (x) => {
const dependency = require('./dependency'); // yuck
dependency.doSomething(x * 2);
}
//myModule-test.js
describe('myModule', () => {
it('calls the dependency with double the input', () => {
jest.mock('../dependency');
myModule(2);
const dependency = require('../dependency'); // also yuck
expect(dependency.doSomething).toBeCalledWith(4);
});
});
Für Bonuspunkte würde ich gerne dafür sorgen, dass das Ganze funktioniert, wenn die darin enthaltene Funktion dependency.js
ein Standardexport ist. Ich weiß jedoch, dass das Ausspionieren von Standardexporten in Jasmine nicht funktioniert (oder zumindest könnte ich es nie zum Laufen bringen), also hoffe ich nicht, dass es auch in Jest möglich ist.
import
s zurequire
s weiter zu transpilieren . Vielen Dank für die Hinweise.