Zaczynam myśleć, że to nie jest możliwe, ale i tak chcę zapytać.
Chcę przetestować, czy jeden z moich modułów ES6 wywołuje inny moduł ES6 w określony sposób. Z Jasmine jest to bardzo łatwe -
Kod aplikacji:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
I kod testowy:
//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);
});
});
Jaki jest odpowiednik Jest? Wydaje mi się, że jest to bardzo prosta rzecz, ale chcę oderwać włosy, próbując to rozgryźć.
Najbliższe, jakie przyszedłem, to zamiana import
s na require
s i przenoszenie ich wewnątrz testów / funkcji. Żadnej z tych rzeczy nie chcę robić.
// 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);
});
});
Jeśli chodzi o punkty bonusowe, chciałbym, aby wszystko działało, gdy funkcja wewnątrz dependency.js
jest domyślnym eksportem. Wiem jednak, że szpiegowanie domyślnych eksportów nie działa w Jasmine (a przynajmniej nigdy nie udało mi się go uruchomić), więc nie mam nadziei, że jest to możliwe w Jest.
import
s dorequire
s. Dzięki za heads-upy.