Angular 6 测试:如何在没有嵌套依赖的情况下提供服务?
Angular 6 testing: How to provide services without their nested dependencies?
我有一个使用 ServiceA
的 ComponentA
。我正在为 ComponentA
编写测试,将 ServiceA
添加到测试平台提供商中。我 运行 测试并得到以下错误:
StaticInjectorError(DynamicTestModule)[ServiceA -> ServiceB]
NullInjectorError: No provider for ServiceB!
我将 ServiceB
添加到提供商。我 运行 再次测试,现在我得到:
StaticInjectorError(DynamicTestModule)[ServiceB -> ServiceC]
NullInjectorError: No provider for ServiceC!
我的项目有很多嵌套依赖项,所有服务都有 @Injectable
装饰器。如何避免提供长长的嵌套服务列表?
在您的 .spec.ts 文件中:
providers: [
{provide: YourService, useClass: YourMockService},
]
YourMockService 将具有与 YourService 相同的方法,但通常只是空方法。这是一个模拟服务:
import { Injectable } from '@angular/core'
@Injectable()
export class YourMockService {
get user() {
// this is mock data
return {username: 'fred'}
}
public getFromLocalStorage(k: string) {
return []
}
}
YourService 将具有这些相同的方法和 getter,但会执行 HTTP 请求等以获取用户名。
我有一个使用 ServiceA
的 ComponentA
。我正在为 ComponentA
编写测试,将 ServiceA
添加到测试平台提供商中。我 运行 测试并得到以下错误:
StaticInjectorError(DynamicTestModule)[ServiceA -> ServiceB]
NullInjectorError: No provider for ServiceB!
我将 ServiceB
添加到提供商。我 运行 再次测试,现在我得到:
StaticInjectorError(DynamicTestModule)[ServiceB -> ServiceC]
NullInjectorError: No provider for ServiceC!
我的项目有很多嵌套依赖项,所有服务都有 @Injectable
装饰器。如何避免提供长长的嵌套服务列表?
在您的 .spec.ts 文件中:
providers: [
{provide: YourService, useClass: YourMockService},
]
YourMockService 将具有与 YourService 相同的方法,但通常只是空方法。这是一个模拟服务:
import { Injectable } from '@angular/core'
@Injectable()
export class YourMockService {
get user() {
// this is mock data
return {username: 'fred'}
}
public getFromLocalStorage(k: string) {
return []
}
}
YourService 将具有这些相同的方法和 getter,但会执行 HTTP 请求等以获取用户名。