2

我有一个ComponentA使用ServiceA. 我正在为 编写一个测试ComponentA,并添加ServiceA到测试平台提供程序中。我运行测试并收到以下错误:

StaticInjectorError(DynamicTestModule)[ServiceA -> ServiceB]
NullInjectorError: No provider for ServiceB!

我添加ServiceB到提供者。我再次运行测试,现在我得到:

StaticInjectorError(DynamicTestModule)[ServiceB -> ServiceC]
NullInjectorError: No provider for ServiceC!

我的项目有很多嵌套的依赖,所有的服务都有@Injectable装饰器。如何避免提供一长串嵌套服务?

4

1 回答 1

3

在您的 .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 请求等以获取用户名。

于 2018-08-09T18:40:31.940 回答