AngularJS - модульный тест с ответом заголовка

0

Мой бэкэнд возвращает мне 'x-token' когда пользователь успешно регистрируется в моей сети. На моем интерфейсе я делаю простую проверку, получая этот токен и настройку: $rootScope.authenticated = true; если токен отсутствует в ответе заголовка по какой-либо причине, мои интерфейсные наборы: $rootScope.authenticated = false;

Мой контроллер

signinService
    .signin(datafromForm)
    .then(function (data) {
        if ( $myTokenManager.save(data.headers('x-token')) ) {
            $rootScope.authenticated = true;
        } else {
            $rootScope.authenticated = false;
            // Unit test is sent it here :(
        }

    });

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

describe('Testing controllers', function() {

    describe('MyController unit test', function() {

        var $httpBackend, $rootScope, createController, authRequestHandler, datafromForm;

        beforeEach(module('myapp'));

        beforeEach(inject(function($injector) {

            $httpBackend = $injector.get('$httpBackend');

            authRequestHandler = $httpBackend
                                    .when(
                                        'POST',
                                        'http://mywebapp:8080/loginuser',
                                        {"username":"admin", "password":"admin"}
                                    ).respond({'x-token': 'XXX'});

            $rootScope = $injector.get('$rootScope');
            var $controller = $injector.get('$controller');

            createController = function() {
                return $controller('MyController', {'$scope' : $rootScope});
            }
        }));

        //
        afterEach(function() {
            $httpBackend.verifyNoOutstandingExpectation();
            $httpBackend.verifyNoOutstandingRequest();
        });

        //
        it('should authentication user', function() {

            var controller = createController();

            //
            $rootScope.username = "admin";
            $rootScope.password = "admin";

            datafromForm = {
                username: $rootScope.username,
                password: $rootScope.password
            };

            $httpBackend.expectPOST(
                'http://mywebapp:8080/loginuser',
                {"username":"admin", "password":"admin"}
            ).respond(
                200, 
                {'x-token': 'XXX'}
            );

            $rootScope.login(formData);
            $httpBackend.flush();
            expect($rootScope.authenticated).toBe(true); // This is getting false :(
        });





    });

});

Я следую этому примеру по угловой документации.

Теги:
unit-testing
karma-jasmine

1 ответ

0
Лучший ответ

Задокументированная подпись функции respond()

function([status,] data[, headers, statusText])

В вашем первом respond() вы передаете только данные и нет заголовка:

respond({'x-token': 'XXX'});    

Во втором respond() вы передаете только статус и данные и все еще не заголовок:

respond(
    200, 
    {'x-token': 'XXX'}
);
  • 0
    хороший сайт, кстати. quizzie.io
  • 0
    @razorblade отчаянно нуждается в твоих тестах :-) Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню