我想在loginUser
内测试服务电话LoginController
。
如果loginUser
是全局方法,那么现在没问题。
但我尝试在点击登录按钮后对其进行测试。
控制器
$scope.login = function () {
UtilsFactory.showLoader();
LoginService.loginUser($scope.data.username, $scope.data.password, false).success(function (data) {
UtilsFactory.hideLoader();
if ($scope.loginSuccessfull(data)) {
$location.path('/tab');
} else {
UtilsFactory.hideLoader();
UtilsFactory.popup('Login failed!', data.Message);
}
}).error(function (data) {
UtilsFactory.hideLoader();
UtilsFactory.popup('Login failed!', 'Login credentials failed!');
});
}
测试
描述("单位:登录控制器",function(){ var $ rootScope,$ scope,$ controller,LoginService;
// load the controller's module
beforeEach(module('starter'));
beforeEach(inject(function (_$rootScope_, _$controller_, _LoginService_) {
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
$controller = _$controller_;
LoginService = _LoginService_;
$controller('LoginController', {
'$rootScope': $rootScope,
'$scope': $scope,
'LoginService': LoginService
});
}));
//Success
it("should call the login method on the LoginController", function () {
spyOn($scope, "login");
$scope.login();
expect($scope.login).toHaveBeenCalled();
});
//Fails
it("calls the loginUser() function", function () {
spyOn(LoginService, "loginUser");
spyOn($scope, "login");
$scope.login();
expect(LoginService.loginUser).toHaveBeenCalled();
});
});
我得到的错误是
calls the loginUser() function
Error: Expected a spy, but got undefined.
我理解为什么我会得到它,只是不知道如何解决它。
答案 0 :(得分:1)
<!
没有返回间谍,但用间谍替换了你的对象的方法。因此,spyOn
变量获得spy
,因为undefined
再次没有返回任何内容,这就是您收到此错误的原因。相反,您应该将一个被间谍替换的方法传递给spyOn
:
expect