无法增加 Angular 单元测试中的代码覆盖率

Not able to increase code coverage in Angular Unit testing

我正在尝试学习如何使用 Karma 和 Jasmine 为 Angular 进行单元测试。

我的问题是我用 spyOn() 和 expect.toHaveBeenCalled() 实现了它,即使 Karma 说它通过了测试,代码覆盖率也没有更新。

我是 angular 单元测试的新手,我不知道如何正确地测试方法以获得代码覆盖率。

感谢大家的帮助。

spyOn(EnvironmentService, 'isProduction'); 覆盖服务方法,然后 EnvironmentService.isProduction(); 调用间谍而不是您的方法。因此不会调用您的方法。有效的测试将删除间谍并以某种方式看起来像 expect(EnvironmentService.isProduction()).toBe(false)

实际上,您不仅需要创建间谍,还需要执行间谍以增加覆盖范围。间谍用存根替换间谍函数。如果你想让这个spy函数被正常调用,你需要在你的spy..and.callThrough()中添加.and.callThrough()

spyOn(EnvironmentService, 'isProduction').and.callThrough()

您还可以在这里阅读更多内容:about spy and callThrough