【发布时间】:2014-10-22 14:02:46
【问题描述】:
我有一个控制器,它在 $scope 中公开了一个调用服务 loginService 的函数
$scope.validateCredentials = function (callback){
loginService.validate($scope.username, $scope.password)
.then(function (){
self.credentialsRight();
if (typeof callback !== "undefined") {
callback("credentials right callback");
}
}, function (){
self.credentialsWrong();
if (typeof callback !== "undefined") {
callback("credentials wrong callback");
}
})
}
我已经设法测试了上述方法是否适用于像这样用茉莉花测试它
it("validateCredentials - passing in the right credentials", function() {
spyOn(loginService, 'validate').andCallFake(function() {
return successfulDeferred.promise;
});
$scope.validateCredentials(function() {
expect($scope.error).toBe(false);
});
$scope.$apply();
});
我之所以使用间谍调用 andCallFake 是因为我想伪造一个返回的承诺。请注意,我曾尝试使用 $httpBackend.onPOST 失败。
但是,我觉得在我的控制器中使用回调仅用于测试目的并处理异步响应很奇怪。你们知道更好的实现方法吗?我见过 waitsFor 并运行,但似乎对我不起作用。
【问题讨论】: