35 unit-testing typescript angular angular5
运行单元测试时,我不断收到以下错误
Error: StaticInjectorError(DynamicTestModule)[ApiService -> HttpClient]:
StaticInjectorError(Platform: core)[ApiService -> HttpClient]:
NullInjectorError: No provider for HttpClient!
Run Code Online (Sandbox Code Playgroud)
api.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ApiService {
constructor(private http: HttpClient) { }
url = './assets/data.json';
get() {
return this.http.get(this.url);
}
}
Run Code Online (Sandbox Code Playgroud)
api.service.spec.ts
import { TestBed, inject } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { ApiService } from './api.service';
describe('ApiService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
],
providers: [
ApiService,
],
});
});
it('should get users', inject([HttpTestingController, ApiService],
(httpMock: HttpTestingController, apiService: ApiService) => {
expect(apiService).toBeTruthy();
}
)
);
});
Run Code Online (Sandbox Code Playgroud)
我不明白出现了什么问题,因为我已将HttpClient包含在api.service.ts中,该服务在浏览器中有效.
这在名为MapComponent的组件中直接调用,并在HomeComponent中调用.
Chrome 63.0.3239 (Mac OS X 10.13.3) HomeComponent expect opened to be false FAILED
Error: StaticInjectorError(DynamicTestModule)[ApiService -> HttpClient]:
StaticInjectorError(Platform: core)[ApiService -> HttpClient]:
NullInjectorError: No provider for HttpClient!
Run Code Online (Sandbox Code Playgroud)
小智 39
我正面临着"NullInjectorError:没有HttpClient的提供者!" 问题.应用了在线建议的所有可用选项后,没有一个适用于我的角度单元测试.
最后在我的.service.spec.ts文件中添加下面的部分修复了问题.
imports: [
HttpClientTestingModule,
],
Run Code Online (Sandbox Code Playgroud)
M.O*_*vio 14
只需像这样添加它,
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
],
}).compileComponents();
});
Run Code Online (Sandbox Code Playgroud)
R. *_*rds 10
尝试包装你inject的async,如下所示:
import { TestBed, async, inject } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { ApiService } from './api.service';
describe('ApiService', () => {
beforeEach(() => {
...
});
it(`should create`, async(inject([HttpTestingController, ApiService],
(httpClient: HttpTestingController, apiService: ApiService) => {
expect(apiService).toBeTruthy();
})));
});
Run Code Online (Sandbox Code Playgroud)
不要忘了导入async从@angular/core/testing.
我在这方面取得了很大的成功.它与我的单元测试和我使用的地方唯一不同HttpClientTestingModule.
| 归档时间: |
|
| 查看次数: |
40341 次 |
| 最近记录: |