Estou começando a pensar que isso não é possível, mas quero perguntar de qualquer maneira.
Quero testar se um dos meus módulos ES6 chama outro módulo ES6 de uma maneira específica. Com Jasmine, isso é super fácil -
O código do aplicativo:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
E o código de teste:
//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);
});
});
Qual é o equivalente com Jest? Eu sinto que isso é uma coisa tão simples de se querer fazer, mas eu tenho arrancado meu cabelo tentando descobrir isso.
O mais próximo que cheguei é substituindo os import
por require
s e movendo-os para dentro dos testes / funções. Nenhuma das coisas que eu quero fazer.
// 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);
});
});
Para pontos de bônus, eu adoraria fazer a coisa toda funcionar quando a função interna dependency.js
for uma exportação padrão. No entanto, eu sei que espionar as exportações padrão não funciona no Jasmine (ou pelo menos eu nunca consegui fazê-lo funcionar), então não tenho esperança de que seja possível no Jest também.
import
s pararequire
s por enquanto. Obrigado pelo alerta.