Мой бэкэнд возвращает мне '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 :(
});
});
});
Я следую этому примеру по угловой документации.
Задокументированная подпись функции respond()
function([status,] data[, headers, statusText])
В вашем первом respond()
вы передаете только данные и нет заголовка:
respond({'x-token': 'XXX'});
Во втором respond()
вы передаете только статус и данные и все еще не заголовок:
respond(
200,
{'x-token': 'XXX'}
);