Как проверить ответ об ошибке в угловом $httpBackend?

Мы используем angular 1.2.x (мы должны это сделать из-за IE8). Тестируем с Кармой и Жасмин. Я хочу проверить поведение своих модулей на случай, если сервер ответит ошибкой. Согласно документации angular, я должен просто подготовить макет $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 в качестве второго аргумента.

Видимо я тут что-то не так делаю. Может ли это быть связано с более старой версией angular, которую мы используем?

Любая помощь будет оценена по достоинству!


person Serg Derbst    schedule 05.11.2015    source источник


Ответы (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();
person Ralf de Kleine    schedule 05.11.2015