如何使用 Jest 模拟 ES6 模块导入?
2022-08-29 23:21:35
我想测试我的一个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的等价物是什么?我觉得这是一件很简单的事情,但我一直在撕扯我的头发试图弄清楚它。
我最接近的是用s替换s,并将它们移动到测试/函数中。这两件事都不是我想做的。import
require
// 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);
});
});
对于奖励积分,当里面的函数是默认导出时,我很乐意让整个事情工作。但是,我知道监视默认导出在Jasmine中不起作用(或者至少我永远无法让它工作),所以我也不抱有希望在Jest中实现它。dependency.js