2015-11-03 108 views
0

我想对if语句执行单元测试,以便代码覆盖的分支部分提供良好的结果。我没有得到这样的想法,因为究竟应该在下面单元测试if if else语句角度js

Controller.js代码

(function() { 
    "use strict"; 

    angular 
     .module("app.login") 
     .controller("LoginController", LoginController); 

    LoginController.$inject = ["$scope", "$http", "$state", "$rootScope", "logger", "$location"]; 

    /** 
    * @ngdoc controller 
    * @name app.login.controller 
    * @memberof app.login 
    * @summary 
    * This is the controller for the login module 
    * 
    * @param {Object} $scope 
    * @param {Object} $http 
    * @param {Object} $state 
    * @param {Object} $rootScope 
    * @param {Function} logger 
    * @constructor 
    */ 
    function LoginController ($scope, $http, $state, $rootScope, logger, $location) { 

     var vm = this; 
     this.cancel = $scope.$dismiss; 

     logger.info("Started LoginController"); 

     /** 
     * login function 
     * 
     * @memberof app.login.controller 
     */ 
     this.login = function() { 
      if ($scope._username == "admin" && $scope._password == "password") { 
       $state.go("main.login.success"); 
      } else { 
       logger.error("Login Unsuccessful"); 
      } 
     }; 

    } 
})(); 

testing.js

describe("LoginController", function() { 
    var $scope; 
    var controller; 
    var logger; 
    var $cookies; 
    var temp; 

    beforeEach(module("app.login")); 

    beforeEach(inject(function ($controller, _$rootScope_, _logger_, _$cookies_) { 
     $scope = _$rootScope_.$new(); 

     controller = $controller("LoginController", { 
      $scope: $scope, 
      logger: _logger_ 

     }); 

     $scope.$digest(); 
    })); 


it("admin should be the username", function() { 
     $scope._username = "admin"; 
     expect($scope._username).toEqual("admin"); 

    }); 


    it("is username is admin", function() { 

     expect(controller.login).toBe(true); 
    }); 

我都尝试,但它不覆盖的if-else分支呢。任何人都可以请指出我在上面的代码中缺少的是什么。谢谢!

回答

0

写您的测试用例如下面写

it("admin should be the username", function() { 
    $scope._username = "admin"; 
    $scope._password == "password"; 
    spyOn($state, 'go'); 
    controller.login(); 
    expect($state.go).toHaveBeenCalledWith('main.login.success'); 

}); 

it("should log error if username or password is incorrect", function() { 
    $scope._username = "admin"; 
    $scope._password == "tests"; 
    spyOn(logger, 'error'); 
    controller.login(); 
    expect(logger.error).toHaveBeenCalledWith('Login Unsuccessful'); 

}); 

你首先要窥探你想观看,使预期的方法。