所以我的单元测试摘录如下。以下运行正常,但不会发生console.log语句。此外,服务中的console.log语句也不会发生。我已经尝试在它的末尾添加.error位,但这绝对没有区别。我想得到我的LoginService.refreshToken()。然后函数才能正常工作。
it('refreshToken Executes Properly', inject(function (LoginService, $httpBackend, localStorageService) {
var dummyToken = {""};
localStorageService.set('token', dummyToken);
$httpBackend.expect('POST', 'URL', data2, {
headers: {
"Content-Type": "",
"Accept": "",
"Authorization": ""
}
}).respond(200, {success:true});
//nothing inside the below function does anything??
LoginService.refreshToken().then(function(response) {
console.log("Ran");
expect(response.data.success).toBe(true);
});
}));
这是我的服务
refreshToken: function(refreshCallback) {
var baseURL = sharedProperties.getBaseURL();
var token = localStorageService.get('token');
if (token && token.refresh_token) {
var data = "";
return $http.post(URL, data, {
headers: {
"Content-Type": "",
"Accept": "",
"Authorization": "")
}
}).success(function(response) {
var expiredAt = new Date();
console.log("Attempt A");
expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
response.expires_at = expiredAt.getTime();
localStorageService.set('token', response);
if (refreshCallback) {
refreshCallback();
}
return response;
});
}
}
我原本以为我的if语句不满意,但我检查过,情况并非如此。有些东西根本无法正常工作,我不知道是什么。我有一个几乎相同的函数,以及一个测试,它可以做我想要的工作.then语句。我在下面发布了它。我不明白我的两个功能有什么不同,其中一个有效,另一个没有。
initiateRequest: function (username, password) {
var baseURL = sharedProperties.getBaseURL();
var data = "";
$http.defaults.headers.post['Content-Type'] = '';
$http.defaults.headers.post['Accept'] = '';
$http.defaults.headers.post['Authorization'] = "";
return $http.post(URL, data, {}).success(function(response) {
var expiredAt = new Date();
expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in);
response.expires_at = expiredAt.getTime();
localStorageService.set('token', response);
$http.defaults.headers.post['Content-Type'] = undefined;
$http.defaults.headers.post['Accept'] = undefined;
$http.defaults.headers.post['Authorization'] = undefined;
return response;
})
it('Login Execute Properly', inject(function (LoginService, $httpBackend, localStorageService) {
$httpBackend.expect('POST', URL, data, {
"Content-Type": "",
"Accept": "",
"Authorization": ""
}).respond(200, {success: true});
LoginService.initiateRequest("", "").then(function(response) {
expect(response.data.success).toBe(true);
testToken = response;
});
var testToken = localStorageService.get('token');
$httpBackend.flush();
}));
答案 0 :(得分:0)
您需要在单元测试中运行 $ rootScope。$ apply ,告诉测试运行员解决(e.i. apply)所有承诺。