Javascript 带回调的单元测试函数
我是angularJS新手,正在尝试对函数进行单元测试。 情节如下: controller.jsJavascript 带回调的单元测试函数,javascript,angularjs,unit-testing,callback,karma-jasmine,Javascript,Angularjs,Unit Testing,Callback,Karma Jasmine,我是angularJS新手,正在尝试对函数进行单元测试。 情节如下: controller.js angular .module('portal') .controller('loginController', loginController); loginController.$inject = ['$location','dataService']; function loginController($location,dataService) { var logi
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 authenticateuser函数,回调函数只是一个布尔值
dataService是一个服务,充当其他服务和控制器之间的中间层
我不是在dataService中进行http调用,回调只是为了传达它已执行
回调({success:true})
基于此,我执行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();
});
});
测试正在通过,但当我查看代码覆盖率时,我发现回调没有经过测试。那么,我应该如何进行测试呢
我还想访问响应变量并比较其值
任何帮助都将不胜感激。。。
谢谢谢谢,我已经解决并学习了。你可以参考这个链接