Как проверить ответ об ошибке в $httpBackend angular?
Мы используем угловой 1.2.x (мы должны из-за IE8). Мы тестируем с Кармой и Жасмином. Я хочу проверить поведение моих модулей на случай, если сервер ответит ошибкой. Согласно угловой документации, мне просто нужно подготовить макет $httpBackend следующим образом (именно так, как я ожидал):
authRequestHandler = $httpBackend.when('GET', '/auth.py');
// Notice how you can change the response even after it was set
authRequestHandler.respond(401, '');
Вот что я делаю в своем тесте:
beforeEach(inject(function($injector) {
keepSessionAliveService = $injector.get('keepSessionAliveService');
$httpBackend = $injector.get('$httpBackend');
$interval = $injector.get('$interval');
}));
(...)
describe('rejected keep alive request', function() {
beforeEach(function() {
spyOn(authStorageMock, 'get');
spyOn(authStorageMock, 'set');
$httpBackend.when('POST', keepAliveUrl).respond(500, '');
keepSessionAliveService.start('sessionId');
$interval.flush(90*60*1001);
$httpBackend.flush();
});
it('should not add the session id to the storage', function() {
expect(authStorageMock.set).not.toHaveBeenCalled();
});
});
Но тест не пройден, потому что вызывается фиктивная функция, и я вижу в покрытии кода, что она никогда не встречается с функцией ошибки, которую я передаю в §promise.then в качестве второго аргумента.
Видимо, я делаю что-то не так здесь. Может ли это быть со старой угловой версией, которую мы используем?
Любая помощь будет оценена!
1 ответ
Что-то вроде этого:
it("should receive an Ajax error", function() {
spyOn($, "ajax").andCallFake(function(e) {
e.error({});
});
var callbacks = {
displayErrorMessage : jasmine.createSpy()
};
sendRequest(callbacks, configuration);
expect(callbacks.displayErrorMessage).toHaveBeenCalled();