Я выбрасываю ошибку из $httpBackend
ответа на функцию, а затем регистрирую и перебрасываю в части catch цепочки обещаний AngularJS:
function doAThingThatMustBeLogged(param) {
return ExternalService.thingToLogFunction(param).then(response =>{
MyLogger.Log('All is well');
}).catch(error => {
MyLogger.Log('Oh no.');
throw new Error(error);
})
}
it('should log doAThingThatMustBeLogged regardless of any errors thrown', () =>{
$httpBackend.expectPOST('https://external-service.com/api/thing/to/log').respond(500);
spyOn(MyLogger, 'Log');
doAThingThatMustBeLogged(1)
try {
$httpBackend.flush();
} catch (error) {
// swallow error
}
expect(MyLogger.Log).toHaveBeenCalledWith('Oh no.');
})
Теперь я только перебрасываю ошибку какЯ не хочу проглотить это в не тестовом коде, потому что код, который вызывает doAThingThatMustBeLogged
, может обрабатывать его лучше выше.Однако это означает, что теперь мне нужно обернуть $httpBackend.flush
в моем тесте в блок try / catch, который затем выдает ошибку.
Это подразумевает, что эта функция выдает ошибки - это не то, что яхочу сделать тестЯ просто хочу выделить код регистрации и тест, который вызывается удовлетворительно.
Есть ли способ выполнить тест, описанный выше, без необходимости пытаться // поймать флеш?