单元测试功能与回调

时间:2016-11-28 12:36:01

标签: 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 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();

    });
});

测试正在通过但是当我查看代码覆盖时,我得到了回调没有经过测试。那么我应该如何测试呢。

另外我想访问响应变量并比较它的值

任何帮助将不胜感激...... 感谢

0 个答案:

没有答案