如何在AngularJS单元测试中测试超出范围的功能

时间:2015-09-02 16:49:38

标签: angularjs unit-testing controller jasmine karma-jasmine

我需要将测试应用于特定的控制器。

测试此控制器是可以的:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) {
    $scope.password = '';

    $scope.grade = function () {
        var size = $scope.password.length;
        if (size > 8) {
            $scope.strength = 'strong';
        } else if (size > 3) {
            $scope.strength = 'medium';
        } else {
            $scope.strength = 'weak';
        }
    };
});

但我想测试一下:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) {


    var vm = this;
    vm.password = '';

    function grade() {
        var size = vm.password.length;
        if (size > 8) {
            vm.strength = 'strong';
        } else if (size > 3) {
            vm.strength = 'medium';
        } else {
            vm.strength = 'weak';
       }
   };
});

我尝试使用以下代码测试控制器:

describe('Test', function () {

    beforeEach(module('app'));

    var MainCtrl, scope;

    beforeEach(inject(function ($controller, $rootScope) {
        scope = $rootScope.$new();
        MainCtrl = $controller('PasswordController', {
            $scope: scope
        });
    }));

    it('Should not throw Exception', function () {
        scope.password = 'abc';
        var call = function () {
            MainCtrl.grade();
        }
        expect(call).not.toThrow();
    });
});

但是我收到了这个错误:预期函数不抛出,但它抛出了TypeError:' undefined'是的 一个函数(评估' MainCtrl.grade()')。

stackOverflow Question帮助我应用测试功能来实现这个'。但是我想测试$ scope和'这个' ...

的功能

任何想法如何将单元测试应用于此控制器?

1 个答案:

答案 0 :(得分:1)

等级方法未附加到控制器;

vm.grade = grade;

Working Plunkr