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

标签 angular testing jasmine karma-runner injectable

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

关于 Angular 6 测试 : How to provide services without their nested dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51771794/

相关文章:

javascript - Angular 4和Nodejs http post请求实现错误

java - 当我使用多个时间进行模拟时会发生什么?

angular - 如何在 Angular 6 的生产构建中忽略规范文件和模拟文件

performance - 使用加特林将条件放入 HTTP 请求中

angular - 具有模拟服务的单元测试组件 - 错误

库中组件的 CSS 文件未随 Angular 应用程序中的组件一起加载

Angular 和 RxJS 导入

javascript - 引用错误: Can't find variable: d3

angular - 类型错误 : Cannot read properties of undefined (reading 'pipe' )

angular - 具有 Angular 2 重新加载问题的 Electron App