我有一个服务,在该服务内,我有这样的功能
settings.updateProfile = function(patient){
return $q(function(resolve, reject) {
var user = patient;
dbService.updateUser(user).then(
function (response) {
if (response.res) {
LoopBackAuth.setUser(LoopBackAuth.accessTokenId, response.res.name, LoopBackAuth.currentUserRole);
LoopBackAuth.save();
location.reload();
patient.name == response.res.name ? resolve(true) : resolve(false);
}
},
function (error) {
resolve(false);
}
);
});
};
这里 dbService.updateUser 函数也包含 $promise。我想测试这个函数并检查它是否解决了 true 或 false。我知道对于 http api 调用,我们使用 $httpBackend 服务。但它并没有像我预期的那样工作。现在我正在这样测试。
it('Should return correct result', function() {
var result = true;
var patient = {"name": "newUser"};
$httpBackend.whenGET(patient).respond(200, $q.when(result));
expect(settingsFactory.updateProfile).not.toHaveBeenCalled();
expect(result).toEqual(true);
settingsFactory.updateProfile(patient)
.then(function(res) {
result = res;
});
$httpBackend.flush();
expect(settingsFactory.updateProfile).toHaveBeenCalledWith(patient);
});
显示错误:
Error: Unexpected request
最佳答案
$httpBackend.whenGET(patient).respond(...);
失败,因为 patent
是一个对象 {"name": "newUser"}
并且 whenGET 需要一个字符串。例如:
$httpBackend.whenGET('/patient').respond(...);
关于javascript - 如何在 AngularJS 中测试具有 $q promise 和 karma 的服务功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991152/