Je commence à penser que ce n'est pas possible, mais je veux quand même demander.
Je veux tester qu'un de mes modules ES6 appelle un autre module ES6 d'une manière particulière. Avec Jasmine, c'est super facile -
Le code de l'application:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
Et le code de test:
//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);
});
});
Quel est l'équivalent avec Jest? J'ai l'impression que c'est une chose si simple à vouloir faire, mais je me suis arraché les cheveux en essayant de le comprendre.
Le plus proche que je suis venu est de remplacer le import
s par le require
s et de les déplacer dans les tests / fonctions. Je ne veux pas faire quoi que ce soit.
// 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);
});
});
Pour les points bonus, je serais ravi de faire fonctionner le tout lorsque la fonction à l'intérieur dependency.js
est une exportation par défaut. Cependant, je sais que l'espionnage des exportations par défaut ne fonctionne pas dans Jasmine (ou du moins je ne pourrais jamais le faire fonctionner), donc je n'espère pas que cela soit possible dans Jest.
import
s enrequire
s pour l'instant. Merci de m'avoir mis au courant.