Я починаю вважати, що це неможливо, але все одно хочу запитати.
Я хочу перевірити, що один із моїх модулів ES6 певним чином викликає інший модуль ES6. З Жасмином це дуже просто -
Код програми:
// myModule.js
import dependency from './dependency';
export default (x) => {
dependency.doSomething(x * 2);
}
І тестовий код:
//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);
});
});
Що еквівалентно Jest? Я відчуваю, що це так просто хочеться зробити, але я рвав волосся, намагаючись зрозуміти це.
Найближче до мене прийшло замінити import
s на require
s і перемістити їх всередині тестів / функцій. Жодна з яких речей я не хочу робити.
// 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);
});
});
Щодо бонусних балів, я хотів би, щоб вся справа працювала, коли функція всередині dependency.js
- це експорт за замовчуванням. Однак я знаю, що шпигунство на експорт за замовчуванням не працює в Жасмині (або, принаймні, я ніколи не міг би змусити його працювати), тому я не витримую надії, що це можливо і в Jest.
import
s вrequire
s. Дякую за голови вгору, хоча.