使用 Karma 进行角度测试
Posted
技术标签:
【中文标题】使用 Karma 进行角度测试【英文标题】:Angular Testing using Karma- 【发布时间】:2019-05-01 18:34:06 【问题描述】:我正在测试一个 Angular 组件并且我的组件依赖于一个服务,所以我的组件的构造函数在逻辑上注入了服务。在ngOnInit
,服务在多个地方被调用。
我遇到的问题是我需要测试部分组件并且只想模拟一小部分服务。在模拟之后,我意识到ngOnInit
中的许多代码依赖于服务,所以这导致我在 MockService 中复制大量代码,以便我可以使ngOnInit
工作并且我可以正确地实例化组件。但同时它也有很多复制。
我不想模拟该服务中的所有内容,只模拟 it() 函数中我需要的部分。我该如何解决这个问题?
有没有办法我仍然可以创建我的组件进行测试,注入一个模拟服务但在 it() 上覆盖我需要的任何东西?
我不想通过扩展 OriginalService 来创建 MockService,因为我想完全隔离组件。
谢谢。
【问题讨论】:
您可以使用间谍,让注入为您完成其余工作,而不是模拟所有内容。看看codecraft.tv/courses/angular/unit-testing/mocks-and-spies/… 【参考方案1】:如果我理解您的要求,那么是的,这是可行的。我整理了一个Stackblitz 来向您展示解决此问题的一种可能方法。在 stackblitz 中是一个依赖于 SomeService 的简单组件。
正如您在 my.component.spec.ts
文件中看到的那样,我正在使用间谍来仅覆盖 SomeService 中每个规范所需的部分('it' 函数)。
希望您可以将其用作模式并针对您的特定实现进行修改。
【讨论】:
以上是关于使用 Karma 进行角度测试的主要内容,如果未能解决你的问题,请参考以下文章
使用 karma 和 jamis 进行 Angular 单元测试
在我的 JSPM 包上使用 JSPM 404 进行 Karma/Jasmine 单元测试