Проблема
Привет всем, я добавляю несколько юнит-тестов Карма-Жасмин в свой проект Angular 2, и я не могу на всю жизнь получить покрытие, чтобы поразить операторов RXJS в моих методах обслуживания.
В тестах используются HttpClientTestingModule и HttpTestingController.
Код
Вот простой пример использования оператора карты.
MyService:
getAssetCount(): Observable<AssetModel[]> {
return this.http
.get('/myproject/v1/asset-count')
.pipe(map(response => response as AssetModel[]));
}
MyService.spec:
service = testBed.get(MyService);
httpMock = testBed.get(HttpTestingController);
...
it('should getAssetCount', () => {
const dummyResponse = [{...}];
service.getAssetCount().subscribe((response: AssetModel[]) => {
expect(response).toEqual(dummyResponse);
const req = httpMock.expectOne(
'/myproject/v1/asset-count'
);
expect(req.request.method).toBe('GET');
req.flush(dummyResponse);
httpMock.verify();
});
});
Результат
Полученное покрытие:
Я бы подумал, чтоподписка на наблюдаемое в тесте вызовет вызов map () , но, возможно, я неправильно понимаю, как работают эти фиктивные сервисы.
При взгляде вокруг кажется, что переключение на XHRBackend вместо HttpClientTestingModule для генерации фиктивных ответов 200/404 / etc может решить эту проблему, но помимо того, что они являются более шаблонными, большинство людей предлагают использовать инсталляцию TestingModuleобъявление.