我目前正在开发一个项目,我正在使用Jest进行单元测试和代码覆盖。
一切都运行正常,除了模拟类/方法的覆盖范围。我似乎没有得到理想的覆盖率结果。我试图在Jest文档中找到一些东西并在网上搜索答案,但我似乎找不到任何关于它的东西。
问题在于,当我使用模拟实现(例如./services/__mocks__/UserService.js
)时,实际实现(./services/UserService.js
)导致覆盖率为0%。这是一个合乎逻辑的结果,因为模拟会覆盖实现。
我可以通过在实际服务中的每个方法上使用/* istanbul ignore next */
来解决这个问题,或者只是将实际服务添加到Jest安装文件中的coveragePathIgnorePatterns
属性,然后让它为所有模拟类生成覆盖,但我想知道是否有任何方法可以让Jest自动使用模拟的实现来生成覆盖结果。
模拟类/函数和代码覆盖的方法是什么?
提前致谢!
正如在文档中说for manual mocks,只有当你明确地调用像./services/__mocks__/UserService.js
这样的东西时才会使用jest.mock('./services/UserService');
。
如果你想为./services/UserService
编写测试,请确信在测试之前你不要使用jest.mock('./services/UserService');
。