Есть ли способ проверить поведение тайм-аута HTTP службы?угловой 2 MockBackend тест http таймаут?
Я использую MockBackend даже при установке тайм-аута задания на 0 отсутствия регистрации «TIMEOUT».
export class MyHttpService {
private sendGetRequest (job: HttpJob): Observable<any> {
return this.http.get(job.getUrl(), this.options)
.share()
.timeout(job.getTimeout(),() => this.requestTimeout(job))
.catch((err) => this.errorHandler(err, job));
};
private requestTimeout(job: HttpJob): Error {
job.errorCode = ErrorCode.TIMEOUT;
console.log('TIMEOUT');
return new Error('timeout');
}
...
тест (ничего не зарегистрирован)
it('should resolve to TIMEOUT',() => {
job.timeout = 0;
let response: any;
service.sendRequest(job).subscribe(
(res: Response) => {
response = res.json();
console.log('OK', res);
},
err => {
response = err;
console.log('ER', err);
}
);
expect(job.errorCode).toEqual(ErrorCode.TIMEOUT);
});
Thx!
обновление: minimal example, если тайм-аут раскомментирован, он потерпит неудачу
вы прав тест упаковки в асинхронном (..) получил меня рядом, однако теперь, если 'DoSomthing()' 'содержит тайм-аут (30000, новую ошибку ('....')) 'в наблюдаемой цепочке я получаю эту ошибку:' Не могу использовать setInterval из теста асинхронной зоны '. Как я могу проверить время ожидания HTTP? –
Правильно, 'setInterval' не может вызываться из' async'. Может быть, и fakeAsync. И 'timeout' вызывает' setInterval' внутренне. Не уверен, что вы можете сделать. Дай мне подумать об этом. Я уверен, что он тоже потерпит неудачу, но попытайтесь использовать 'fakeAsync' –
OK Я думаю, что получил решение. Вместо любого из них просто используйте жасмин native 'done'. 'it ('..', ((done) => {' и вызывать 'done' внутри обратного вызова после того, как вы сделаете это ожидание. Я полагаю, что это должно работать –