当用户在我的网站上成功登录时,我的后端会检索'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 :(
});
});
});
我关注角度文档的this示例。
答案 0 :(得分:1)
respond()
函数的文档签名是
function([status,] data[, headers, statusText])
在您的第一个respond()
中,您只传递数据,而不是标题:
respond({'x-token': 'XXX'});
在您的第二个respond()
中,您只传递状态和数据,但仍然没有标题:
respond(
200,
{'x-token': 'XXX'}
);