Javascript 如何测试jest模拟模块 //utils.js var someModule=require('someModule'); setKey('API_KEY');

Javascript 如何测试jest模拟模块 //utils.js var someModule=require('someModule'); setKey('API_KEY');,javascript,node.js,reactjs,unit-testing,jestjs,Javascript,Node.js,Reactjs,Unit Testing,Jestjs,我想测试setKey功能。所以我写了下面的单元测试用例 jest.mock('someModule,()=>{ 返回{ setKey:jest.fn() } }) 描述('utils',()=>{ 之后(()=>{ 开玩笑 }) 它(`testcase1`,()=>{}) 它(`testcaseutils`,()=>{ expect(someModule.setKey.mocks.calls).toHaveLength(1) }) }); 最后一个测试用例失败,但如果我将最后一个测试用例作为第

我想测试
setKey
功能。所以我写了下面的单元测试用例

jest.mock('someModule,()=>{
返回{
setKey:jest.fn()
}
})
描述('utils',()=>{
之后(()=>{
开玩笑
})
它(`testcase1`,()=>{})
它(`testcaseutils`,()=>{
expect(someModule.setKey.mocks.calls).toHaveLength(1)
})
});
最后一个测试用例失败,但如果我将最后一个测试用例作为第一个移动,那么它就会工作。因为没有执行
clearAllMocks
函数


什么是测试它的好方法?

它应该有效。以下是一个例子:

utils.js

const someModule=require('someModule');
函数main(){
setKey('API_KEY');
}
module.exports=main;
由于
someModule
不是真正的模块,因此我使用
{virtual:true}
选项

utils.test.js

const main=require('./utils');
const someModule=require('someModule');
开玩笑(
“someModule”,
() => {
返回{setKey:jest.fn()};
},
{virtual:true},
);
描述('60192332',()=>{
之后(()=>{
开玩笑。clearAllMocks();
});
它('应该设置键',()=>{
main();
expect(someModule.setKey.mock.calls).toHaveLength(1);
});
});
100%覆盖率的单元测试结果:

PASS stackoverflow/60192332/utils.test.js(6.732s)
60192332
✓ 应设置按键(5ms)
----------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
utils.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:8.38秒,估计13秒

感谢您的输入,但是在您的代码
someModule中,setKey
函数已移动到
main
函数。但我希望它像我在代码中显示的那样被加载一次