Jest.js JavaScript单元测试:模仿同一模块中的其他函数[重复]

huwehgph  于 5个月前  发布在  Jest
关注(0)|答案(1)|浏览(62)

此问题在此处已有答案

How to mock functions in the same module using Jest?(10个答案)
两年前关闭。
我是一个JavaScript开发新手,我在单元测试方面遇到了麻烦。我使用Jest。我使用Node.js 13.14.0运行测试(我使用旧版本,因为我有Windows 7).我有以下问题:我需要从我测试的函数所在的同一个模块中模拟一个函数。简单地说,该函数从同一个模块中调用另一个函数,我想确保它被调用。在Google上搜索后,我没有找到完整的解决方案。我喜欢使用rewire插件的选项,但这会破坏代码覆盖率。我从模块导出函数如下:

module.exports = {
    functions...
}

字符串
然后我使用require将它们导入到测试文件中。
我看到遇到这个问题的人被建议使用ES6模块的一些方法,但我还没有能够弄清楚如何使它们工作,我没有迫切需要在我的项目中使用它们。那么,是否有任何成熟的解决方案?也许我应该使用不同的测试框架?我真的不明白为什么这个问题会存在。每个模块使用一个函数是一种常见的做法吗?
无论如何,我正在寻找一些简单的方法,如使用重新布线:

const otherFuncMock = module.__set__(otherFunc, jest.fn())

module.func() // calls otherFunc()

expect(otherFuncMock).toHaveBeenCalledTimes(1)

2sbarzqh

2sbarzqh1#

如果otherFunc是由模块导出的,那么只需使用jest.fn()来模拟它就可以了

const otherFuncMock = jest.fn(x => module.otherFunc);
module.func();
expect(otherFuncMock).toHaveBeenCalledTimes(1);

字符串
如果它没有被导出,那么我建议你不需要这个测试。它调用另一个函数的事实是一个内部实现问题,你最好专注于测试组合函数执行的结果。

相关问题