我是angularJS的新手,并尝试对该功能进行单元测试。 情节如下:
controller.js
angular
.module('portal')
.controller('loginController', loginController);
loginController.$inject = ['$location','dataService'];
function loginController($location,dataService) {
var loginControllerVm = this;
loginControllerVm.login = login;
function login() {
loginControllerVm.dataLoading = true;
console.log('coming here');
dataService.authenticateUser(loginControllerVm.username, loginControllerVm.password,function (response){
console.log(response);
if(response.success)
{
$location.path('/profile');
}
else
{
console.log('coming in login while testing');
loginControllerVm.dataLoading = false;
$location.path('/');
}
});
}
}
现在在login函数中我们调用dataService authencticateUser函数,回调只是一个布尔值
dataService是一种服务,充当其他服务和控制器之间的中间层。
我没有在dataService中进行http调用,回调就是传达它已执行。
回调({成功:真});
并基于此我执行if条件。
我想对这个login()函数进行单元测试。我已经开始写测试了
test.js
describe('loginController', function() {
//Inject 'app' module into this spec.
beforeEach(module('portal'));
var $q, $controller, injector, $scope,location;
var dataServiceMock = function(){
return {
authenticateUser: jasmine.createSpy()
}
};
beforeEach(function(){
inject(function(_$q_, _$injector_, _$controller_, _$rootScope_,$location){
$q = _$q_;
injector = _$injector_;
location = $location;
$controller = _$controller_;
$scope = _$rootScope_.$new();
dataServiceMock = injector.get('dataService');
});
controller = $controller('loginController', {$scope : $scope, dataService: dataServiceMock});
});
it('successfully gets the list of items from the service', function() {
spyOn(dataServiceMock, 'authenticateUser');
spyOn(location, 'path');
controller.login();
expect(dataServiceMock.authenticateUser).toHaveBeenCalled();
});
});
测试正在通过但是当我查看代码覆盖时,我得到了回调没有经过测试。那么我应该如何测试呢。
另外我想访问响应变量并比较它的值
任何帮助将不胜感激...... 感谢