Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带回调的单元测试函数_Javascript_Angularjs_Unit Testing_Callback_Karma Jasmine - Fatal编程技术网

Javascript 带回调的单元测试函数

Javascript 带回调的单元测试函数,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

我是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 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();

    });
});
测试正在通过,但当我查看代码覆盖率时,我发现回调没有经过测试。那么,我应该如何进行测试呢

我还想访问响应变量并比较其值

任何帮助都将不胜感激。。。
谢谢

谢谢,我已经解决并学习了。你可以参考这个链接