我有一个使用 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 请求等以获取用户名。
关于 Angular 6 测试 : How to provide services without their nested dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51771794/