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