NullInjectorError: Нет поставщика для HttpClient (уже импортирован) - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь протестировать свой сервис с функциями httpclient, но когда я запускаю karma, я всегда получаю сообщение об ошибке, упомянутое в заголовке.

Я уже импортировал HttpClientModule в свой файл спецификаций

Редактировать:
Итак, я обнаружил, что мои тесты работают, просто что в консоли напечатано это сообщение об ошибке, которое сбивает с толку.Я не думаю, что так и должно быть ...

app.module.ts

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';

import {AppRoutingModule} from './app-routing.module';
import {AppComponent} from './app.component';
import {HttpClientModule} from '@angular/common/http';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MaterialModules} from './material-module';
import {DockerService} from './Services/docker.service';

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        AppRoutingModule,
        HttpClientModule,
        BrowserAnimationsModule,
        MaterialModules
    ],
    providers: [DockerService],
    bootstrap: [AppComponent],
    entryComponents: []
})
export class AppModule {
}

docker-service.ts

import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Observable} from 'rxjs';

@Injectable({
    providedIn: 'root'
})
export class DockerService {
constructor(private http: HttpClient) {
    }
}

docker-service.spec.ts

import {TestBed} from '@angular/core/testing';
import {DockerService} from './docker.service';
import {HttpClientTestingModule} from '@angular/common/http/testing';
import {HttpClientModule} from '@angular/common/http';

describe('DockerService', () => {
  beforeEach(() => {
          TestBed.configureTestingModule({
              imports: [HttpClientTestingModule],
              providers: [DockerService]
          });
    });
});
'Unhandled Promise rejection:', 'StaticInjectorError(DynamicTestModule)[DockerService -> HttpClient]: 
  StaticInjectorError(Platform: core)[DockerService -> HttpClient]: 
    NullInjectorError: No provider for HttpClient!', '; Zone:', 'ProxyZone', '; Task:', 'Promise.then', '; Value:', NullInjectorError: StaticInjectorError(DynamicTestModule)[DockerService -> HttpClient]: 
  StaticInjectorError(Platform: core)[DockerService -> HttpClient]: 
    NullInjectorError: No provider for HttpClient!

1 Ответ

0 голосов
/ 04 июня 2019

Попробуйте импортировать HttpClientTestingModule, HttpTestingController из'@angular/common/http/testing'.

См. Ниже, как я использовал для проверки угловых услуг.

import { TestBed, inject } from '@angular/core/testing';
import { WorkloadsService } from './workloads.service';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';

describe('WorkloadsService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
    providers: [WorkloadsService],
    imports: [HttpClientTestingModule]
  });
});

it('should call workload services',inject([HttpTestingController, WorkloadsService],
(httpMock: HttpTestingController, backend: WorkloadsService) => {

  backend.getWorkload().subscribe((event) => {
    expect(event['validation']).toBe("success");
  });

  let mockUrl = 'http://localhost/project/workloads/';

  const mockRequestRun = httpMock.expectOne(mockUrl);
    expect(mockRequestRun.request.method).toBe('GET');
}));
})
...