Jestjs 如何使用resetMocks:适用于模块工厂模拟

Jestjs 如何使用resetMocks:适用于模块工厂模拟,jestjs,Jestjs,我想模拟导入的模块,同时保持单元测试彼此独立 在我的Jest配置文件中设置resetMocks:true意味着使用()设置的行为将丢失。以任何其他方式设置模块模拟都不起作用() 更改为resetmock:false将单元测试耦合起来,并使它们的执行顺序变得重要,这与单元测试最佳实践背道而驰 我尝试调用了jest.mock('./a',()=>{/*implementation*/})内部beforeach()和test()的顶部。我还尝试在模块工厂mock中使用对jest.fn()的引用,然后对

我想模拟导入的模块,同时保持单元测试彼此独立

在我的Jest配置文件中设置resetMocks:true意味着使用()设置的行为将丢失。以任何其他方式设置模块模拟都不起作用()

更改为resetmock:false将单元测试耦合起来,并使它们的执行顺序变得重要,这与单元测试最佳实践背道而驰

我尝试调用了
jest.mock('./a',()=>{/*implementation*/})
内部
beforeach()
test()的顶部。我还尝试在模块工厂mock中使用对
jest.fn()
的引用,然后对该引用调用
.mockImplementation()

最低限度的示范:

//greeter.ts
出口级迎宾员{
sayHello():字符串{
返回“你好,世界!”;
}
}
//module-mocking.spec.ts
从“/Greeter”导入{Greeter};
嘲笑('./问候者',()=>({
欢迎者:jest.fn(()=>({sayHello:()=>'再见世界!'))
}));
测试('模拟模块行为应该存在',()=>{
const result=new Greeter().sayHello();
期待(结果)。toEqual(“再见世界!”);
});
此测试失败,错误如下:

TypeError:(中间值)。sayHello不是函数

jest.mock()

预期:“再见世界!”收到:“你好世界!”

编辑 我通过使用
require
而不是
import
解决了这个问题。ES6进口的问题仍然存在

//module-mocking.spec.ts
常数迎宾员=要求(“/迎宾员”);
让嘲弄者来迎接:任何;
在每个之前(()=>{
嘲笑者={sayHello:()=>“再见了,世界!”};
greeter.greeter=jest.fn(()=>mockGreeter);
});
测试('模拟模块行为应该存在',()=>{
const result=new Greeter().sayHello();
期待(结果)。toEqual(“再见世界!”);
});