Winkel-5 service-andernfalls pass unit-tests mit (NullInjectorError: Kein Anbieter für HttpClient!)
Ich erhalte immer folgenden Fehler beim ausführen von unit-tests
Error: StaticInjectorError(DynamicTestModule)[ApiService -> HttpClient]:
StaticInjectorError(Platform: core)[ApiService -> HttpClient]:
NullInjectorError: No provider for HttpClient!
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);
}
}
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();
}
)
);
});
Ich verstehe nicht, was falsch läuft, ich habe HttpClient-in-api.service.ts, der service funktioniert im browser.
Dies ist direkt in einer Komponente namens MapComponent, und dass ist aufgerufen, in 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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund für
"NullInjectorError: No provider for HttpClient!"
sind ungelöste Abhängigkeiten. In diesem Fall das fehlen einerHttpClientModule
.In Ihr .service.spec.ts-Datei hinzufügen
Werden Sie feststellen, dass ich schrieb
HttpClientTestingModule
stattHttpClientModule
. Der Grund ist, dass wir nicht senden möchten, die eigentlichen http-requests, sondern eine Mock-API des test-framework.Versuchen, wickeln Sie Ihre
inject
in einemasync
wie unten:Vergessen Sie nicht importieren
async
aus@angular/core/testing
.Ich hatte guten Erfolg mit dieser. Es ist nur anders als deine unit-tests und mine wo ich
HttpClientTestingModule
.fügen Sie einfach, wie diese,