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 的提供者