Angular 5 Jasmine Error: Ожидается, что один соответствующий запрос по критериям не найден - PullRequest
0 голосов
/ 08 июня 2018

У меня очень простой сервисный звонок и тест на жасмин для него.

Сервисный вызов:

myServiceCall(testId: number) : void {
    const url = `${this.url}/paramX/${testId}`;
    this.http.put(url, {},{headers: this.headers}).subscribe();
}

Мой метод тестирования:

it('should call myServiceCall', inject([MyService], (service: MyService) => {
    let testId = undefined;
    service.myServiceCall(testId);
    let req = httpMock.expectOne(environment.baseUrl + "/paramX/123");

    expect(req.request.url).toBe(environment.baseUrl + "/paramX/123");
    expect(req.request.body).toEqual({});

    req.flush({});
    httpMock.verify();
}));

Я, конечно, получаю исключение, так как ожидаю, что параметр url будет "123", а нене определено, как в этом сценарии тестирования.

Ошибка: ожидается один запрос на соответствие критериям "Соответствие URL: http://localhost:8080/myservice/paramX/123", не найдено ни одного.

То, что я делаюнепонятно, почему тестовая структура говорит, что

не найдена

, хотя запрос сделан. Есть ли возможность позволить тестовой среде сказать мне, что были сделаны другие реальные звонки , аналогично проверке мокито?

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Ваш тест должен быть внутри fakeAsync и вызывать tick () в конце теста.как

it('should call myServiceCall', inject([MyService], fakeAsync((service: MyService) => {
    let testId = undefined;
    service.myServiceCall(testId);
    let req = httpMock.expectOne(environment.baseUrl + "/paramX/123");

    expect(req.request.url).toBe(environment.baseUrl + "/paramX/123");
    expect(req.request.body).toEqual({});

    req.flush({});
    httpMock.verify();
    tick();

})));
0 голосов
/ 10 октября 2018

Моя проблема решена.после того, как я добавил в url, params (если вы используете params).

let results = { param: 'results', value: '50' }; url = `${api.url}${route.url}?${results.param}=${results.value}`;

HttpTestingController всегда отображать только URL без параметров, но если используется expectOne(url), он использует url с запросомстрока вроде этого: http://example.com/path/to/page?name=ferret&color=purple

0 голосов
/ 08 июня 2018

Вы прочитали ошибку неправильно, позвольте мне перефразировать ее для вас:

Ошибка: ожидается один соответствующий запрос [...], не найден.

Это просто означает, что ваш URL не совпадает.

Что вы можете сделать, это добавить консольный журнал вашего URL-адреса с помощью

console.log(req.request.url);

Или вы можете просто попытаться сопоставить запрос.

Другое решение: поскольку вы полагаетесь на переменные среды, вы можете вместо этого запустить этот тест:

expect(req.request.url.endsWith("/paramX/123")).toEqual(true);
...