Sto iniziando a pensare che questo non sia possibile, ma voglio chiederlo comunque.
Voglio testare che uno dei miei moduli ES6 chiama un altro modulo ES6 in un modo particolare. Con Jasmine è semplicissimo -
Il codice dell'app:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
E il codice di prova:
//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 è l'equivalente con Jest? Sento che questa è una cosa così semplice da voler fare, ma mi sono strappato i capelli cercando di capirlo.
Il più vicino a cui sono arrivato è sostituendo la import
s con require
s e spostandola all'interno dei test / funzioni. Nessuna delle due cose che voglio fare.
// 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);
});
});
Per i punti bonus, mi piacerebbe far funzionare tutto quando la funzione interna dependency.js
è un'esportazione predefinita. Tuttavia, so che lo spionaggio delle esportazioni predefinite non funziona in Jasmine (o almeno non potrei mai farlo funzionare), quindi non sto sperando che sia possibile anche in Jest.
import
s arequire
s per ora. Grazie per l'attenzione.