Angular 6 测试:如何在没有嵌套依赖的情况下提供服务?

Angular 6 testing: How to provide services without their nested dependencies?

我有一个使用 ServiceAComponentA。我正在为 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 请求等以获取用户名。