Ошибка: Нет поставщика для HTTPService! В тесте на карму

#http #angular #error-handling #mocking #karma-jasmine

#http #угловой #обработка ошибок #издевательство #karma-jasmine

Вопрос:

У меня есть инструмент angular 2 для мониторинга серверов, и я только начал с тестов. Когда я пытаюсь издеваться над HTTPService, я не знал, как издеваться над Rest-API, поэтому я посмотрел онлайн, исправил некоторые ошибки и теперь застрял на этом.
Здесь ошибка:

 Chrome 53.0.2785 (Windows 10 0.0.0) HttpServiceFront should use an HTTP call Servers FAILED
        Error: No provider for HttpServiceFront!
            at NoProviderError.Error (native)
            ...
            at drainMicroTaskQueue (webpack:///~/zone.js/dist/zone.js:368:0 <- config/karma-test-shim.js:6854:36)
Chrome 53.0.2785 (Windows 10 0.0.0): Executed 2 of 3 (1 FAILED) (skipped 1) (0.268 secs / 0.057 secs)
 

Вот мой тестовый пример:

 import {
    ResponseOptions,
    Response,
    Http,
    BaseRequestOptions,
    RequestMethod
} from '@angular/http';

import {
    TestBed, fakeAsync, inject
} from '@angular/core/testing';

import { HttpServiceFront } from '../app/services/httpServiceFront';

import { MockBackend, MockConnection } from '@angular/http/testing';

const mockHttpProvider = {
    deps: [ MockBackend, BaseRequestOptions ],
    useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
        return new Http(backend, defaultOptions);
    }
};

describe('HttpServiceFront', () => {
    beforeEach(() => {
        {Http, mockHttpProvider}
        TestBed.configureTestingModule(
            [MockBackend,
            BaseRequestOptions]
        )
    });

    it('should use an HTTP call Servers',
        inject(
            [HttpServiceFront, MockBackend],
            fakeAsync((service: HttpServiceFront, backend: MockBackend) => {
                backend.connections.subscribe((connection: MockConnection) => {

                    expect(connection.request.method).toBe(RequestMethod.Get);
                    expect(connection.request.url).toBe(
                        'http://localhost:8080/server');
                });

                service.getServers();
            })));
});
 

Спасибо за помощь 🙂

Ответ №1:

Ваш синтаксис кажется неправильным, проверьте документы. Что-то вроде этого должно работать:

 beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [
          { provide: Http, useValue: mockHttpProvider },
          MockBackend,
          BaseRequestOptions]
    })
});
 

Комментарии:

1. Прежде всего, спасибо за быстрый ответ, но ошибка все та же. Есть еще какие-нибудь идеи?

2. @Bono Вам все равно нужно добавить HttpServiceFront в список поставщиков