NullInjectorError:没有 HttpClient 的提供者

Posted

技术标签:

【中文标题】NullInjectorError:没有 HttpClient 的提供者【英文标题】:NullInjectorError: No provider for HttpClient 【发布时间】:2019-06-25 03:38:24 【问题描述】:

我正在测试一个使用 Apollo 和 graphql 的 Angular 服务,我收到 No provider for HttpClient! 错误,即使我将 HttpClientTestingModule 添加到导入中..

rules.spec.ts

import  PlatformGraphQLService  from 'platform-graphql'
import  TestBed, ComponentFixture  from '@angular/core/testing'
import  RulesService  from './rules.service'
import 
  ApolloTestingModule,
  ApolloTestingController
 from 'apollo-angular/testing'
import  async  from '@angular/core/testing'
import  HttpClientTestingModule  from '@angular/common/http/testing'
import  Apollo, ApolloModule  from 'apollo-angular'

describe('RulesService', () => 
  let controller: ApolloTestingController
  beforeEach(() => 
    TestBed.configureTestingModule(
      imports: [
        ApolloTestingModule,
        HttpClientTestingModule,
      ],
      providers: [
        PlatformGraphQLService,
      ],
    )
    controller = TestBed.get(ApolloTestingController)
  )

  it('should be created', async(() => 
    const service: RulesService = TestBed.get(RulesService)
    expect(service).toBeTruthy()
  ))


)

【问题讨论】:

从未使用过这个,但我正在阅读medium.com/netscape/…,他们似乎明确声明了一个注入器,并且他们使用 HttpTestingController,而不是直接使用 HttpClient。 其他有趣的例子在这里:alligator.io/angular/testing-httpclient 不幸的是,我仍然收到同样的错误.. 其他 cmets 中的链接在 Angular 的当前版本方面有点过时,所以我会改为查看:angular.io/guide/http#testing-http-requests 【参考方案1】:

通常,提供ApolloTestingModule 就足够了。我在关于 Apollo 测试的文章 https://medium.com/@sergeyfetiskin/testing-apollo-graphql-in-your-angular-application-595f0a04aad3 中也是这样做的,我在日常工作中也是这样做的。

HTTPClient 的需求可能不是由 Apollo 本身引起的,而是由您的一些直接使用它的服务引起的。因此,请检查哪个服务使用它并模拟该服务。

我有点惊讶 HTTPClientTestingModule 没有帮助,但我重申它与 Apollo 无关。

【讨论】:

【参考方案2】:

您还需要导入 HttpClientModule。 Apollo 客户端需要该模块来提供 HttpClient。

【讨论】:

以上是关于NullInjectorError:没有 HttpClient 的提供者的主要内容,如果未能解决你的问题,请参考以下文章

NullInjectorError:没有提供 ElementRef

NullInjectorError:ReducerManager 没有提供程序

角度业力 - NullInjectorError:InjectionToken 配置没有提供者

NullInjectorError:没有 HttpClient 的提供者

NullInjectorError:没有提供 DecimalPipe

Angular 9:NullInjectorError:没有 CompilerFactory 的提供者