繁体   English   中英

在使用 Jasmine 进行单元测试时,我应该模拟或监视或存根注入我的组件中的服务吗?

[英]While doing Unit testing with Jasmine should I mock or spy or stub my service which is injected in my component?

在我的 component.ts 中,服务已被注入到订阅服务中的函数并接收信息的组件的构造函数中。 在这种情况下如何测试我的组件?

在 component.ts 我有以下代码:-

在这种情况下我该如何继续?

您要么必须模拟您的服务,这在单元测试方面总是一个好主意,要么使用下面解释的间谍。

选项模拟:

...
providers: [
 {provide: PartService, useClass: MockPartService},
],
...

class MockPartService {
   list(): Observable<Part[]> {
   return Observable.of([...]);
}

您必须使用与您在测试中调用的方法签名相同的方法签名来编写 MockService。 您可能希望将您的预期返回值硬编码到此 MockClass 中。 当您想要模拟例如 API 请求等时,这通常是您想要的,因此您的测试不会抛出。

选项间谍:

const mockParts: Part[] = [...]
const serviceSpy = spyOn(PartService, 'list').and.ReturnValue(Observable.of(mockParts));

当您希望服务为您的测试带来特定回报时,请使用此选项。

您也可以在测试中自由混合。 存根spyOn(YourService, 'YourMethod').and.stub()只会阻止调用实际方法,但不会返回任何值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM