使用 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 中运行的角度测试中工作

JSDom 业力角度设置

使用 karma 和 jamis 进行 Angular 单元测试

在我的 JSPM 包上使用 JSPM 404 进行 Karma/Jasmine 单元测试

在Visual Studio 2013中使用Jasmine + Karma进行AngularJS测试

markdown 使用Karma和Jasmine进行测试 - 介绍