如何在angularjs中对调用服务函数的函数进行单元测试
我在控制器中有一个调用服务的基本函数,我想知道如何测试这个函数 控制器 服务 迄今为止的单元测试如何在angularjs中对调用服务函数的函数进行单元测试,angularjs,unit-testing,Angularjs,Unit Testing,我在控制器中有一个调用服务的基本函数,我想知道如何测试这个函数 控制器 服务 迄今为止的单元测试 现在,我如何对这个登录服务进行单元测试,我是否需要修改我的loginService.login()函数login以便进行测试等等。不确定它是如何完成的 要测试调用其他服务的服务,通常可以模拟这些其他服务(或仅模拟所需的服务),并验证调用的预期函数和传递的适当参数是否正确 当涉及$http或$resource时(它们依赖于$httpBackend),您可以模拟响应(或者只验证命中的某些端点) 关于如
现在,我如何对这个登录服务进行单元测试,我是否需要修改我的loginService.login()函数login以便进行测试等等。不确定它是如何完成的 要测试调用其他服务的服务,通常可以模拟这些其他服务(或仅模拟所需的服务),并验证调用的预期函数和传递的适当参数是否正确 当涉及
$http
或$resource
时(它们依赖于$httpBackend
),您可以模拟响应(或者只验证命中的某些端点)
关于如何使用
$http
、parseService
或authenticate
,您的问题中没有足够的信息,但根据我的推断,您可以监视$locations
的url
方法,或者验证$scope.loginError
是否已正确设置
另请参见此您似乎只需要模拟HTTP响应和$location服务,然后验证是否使用正确的参数调用了
$location.url
,或者是否正确设置了$scope.loginError
。(我不确定“身份验证”来自何处。)身份验证只是一个布尔值,用于验证它是否设置为true,这意味着用户已登录,否则它不会登录。你能提供一个演示/或代码片段吗?因为我遇到了一个故障,怎么办(
app.controller('loginCtrl', function($scope, loginService) {
$scope.login = function() {
loginService.login($scope);
}
});
app.factory('loginService', function(parserService, $location, $http {
return {
login : function(scope) {
parserService.get(function(data) {
if (scope.username === data.username
&& scope.password === data.password) {
authentication.isAuthenticated = true;
authentication.user = data.fullname;
authentication.userImg = data.imgUrl;
$location.url("/homepage");
} else {
scope.loginError = "Invalid login";
}
})
}
}
});
it('should call loginservice and check credentials', inject(function($rootScope,
$controller, loginService) {
//create a new scope that's a child of the $rootScope
$scope = $rootScope.$new();
$scope.login = function (){};
spyOn($scope, "login");
ctrl = $controller('loginCtrl', {
$scope : $scope,
loginService : loginService
});
$scope.username = 'admin';
$scope.password = 'a';
expected($scope.login).toHaveBeenCalledWith(loginService.login($scope);
///Some logic here to return successful login with give credentials/ or error `invalid login`
}));
});