给出两个具有以下实现的简单模块:
bar.js
ObjectType
foo.js
export function bar() {
return 1;
}
和测试 foo.spec.js :
import { bar } from './bar';
export function foo() {
return bar();
}
您可能会注意到使用模块工厂功能定义的import { foo } from './foo';
import { bar } from './bar';
jest.mock('./bar', () => ({
bar: jest.fn(),
}));
describe('Testing blahblah', () => {
it('blahblah should call blah', () => {
foo();
expect(bar).toHaveBeenCalled();
});
});
模块的模拟。
此工厂函数何时调用?多少次?
以某种方式给我的印象是,每次导入时模块工厂函数都被调用 ,因此bar
中的导入返回的模拟与从{导入foo.js
内部,这应该会使测试失败。
我通常会这样解决:
foo.spec.js
但是事实证明,即使没有这种调整,该测试也可以完美通过,如果我在工厂函数中添加打印,我可以看到它仅被调用一次。
有人可以向我解释工厂功能的确切行为是什么吗?