Я пытаюсь написать несколько тестов в Жасмине, и я хотел издеваться над HttpClient в своем пользовательском API-сервисе, но получаю ошибку.В частности, я думаю, что это из-за того, как я написал свой сервис API.Я вызываю конечную точку, а затем кеширую результат в теме поведения.Я возвращаю тему поведения вместо наблюдаемого http-запроса.
Вот мой сервисный код:
getData(binnum, xaxis, yaxis, numLines, selectionId, zoom = false) {
let key = "x" + xaxis + "y" + yaxis + "bin" + binnum + "lines" + numLines;
let cachedItem = this.cache[key];
if (cachedItem != null) {
console.log("cached item");
return cachedItem.bs;
}
let bs = new BehaviorSubject<any>(null);
this.binCache[key] = { bs: bs, ts: new Date().getTime() };
let url = environment.apiEndpoint + 'bins?binnum=' + binnum + '&xaxis=' + xaxis + '&yaxis=' + yaxis;
let obsv = this.http.get(url);
obsv.subscribe((data: Array<any>) => {
bs.next(data);
})
return bs;
}
Вот мой тестовый код:
it(`should issue a request`,
async(
inject([CustomDataService, HttpTestingController], (service: CustomDataService, backend: HttpTestingController) => {
service.getData(200, 1, 2, 100, 0, false).subscribe();
backend.expectOne({
method: 'GET'
});
})
)
);
Я получаю ошибку: Ожидается один соответствующий запрос критериев"Метод сопоставления: GET, URL: (любой)", не найден.
Если я проверяю только HttpClient, он работает:
it(`should issue a request`,
async(
inject([HttpClient, HttpTestingController], (http: HttpClient, backend: HttpTestingController) => {
http.get('/foo/bar').subscribe();
backend.expectOne({
method: 'GET'
});
})
)
);
Как смоделировать запрос httpв моем CustomDataService?Нужно ли отделять службу API от кода кэширования?