Jest - 如何覆盖模拟 类 和实现

Jest - How to get coverage for mocked classes and implementations

我目前正在做一个项目,我使用 Jest 进行单元测试和代码覆盖。

一切正常,除了模拟 classes/methods 的覆盖范围。我似乎没有得到想要的覆盖率结果。我试图在 Jest 文档中找到一些东西并在线搜索答案,但我似乎找不到任何相关内容。

问题是,当我使用模拟实现(例如 ./services/__mocks__/UserService.js)时,实际实现 (./services/UserService.js) 的覆盖率为 0%。这是合乎逻辑的结果,因为实现被模拟覆盖了。

我可以通过在实际服务中的每个方法上使用 /* istanbul ignore next */ 来解决这个问题,或者简单地将实际服务添加到 Jest 安装文件中的 coveragePathIgnorePatterns 属性 并让它而是为所有模拟 类 生成覆盖率,但我想知道是否有任何方法可以让 Jest 自动使用模拟实现来生成覆盖率结果。

模拟 classes/functions 和代码覆盖率的方法是什么?

提前致谢!

正如文档中所说 for manual mocks,只有当您明确调用 jest.mock('./services/UserService');.

时,您才会使用 ./services/__mocks__/UserService.js

如果您想为 ./services/UserService 编写测试,请确保在此测试之前不要使用 jest.mock('./services/UserService');