控制器上的公共变量/方法看不到Jasmine通过Chutzpah定义的定义

时间:2016-02-11 16:02:23

标签: angularjs jasmine chutzpah

我正在尝试使用Visual Studio中的Chutzpah在我的Angular应用程序上运行Jasmine测试。

我有一个定义为的控制器:

angular.module('testApp')
.controller('TestAppCtrl', ['TestService',
    function ($service) {
        var vm = this;

        // just a function for testing
        vm.sum = function (x, y) { return x + y };
    }
]);

然后我将我的Jasmine测试描述为:

describe('TestAppCtrl', function () {
    var ctrl, TestService;

    beforeEach(module('testApp'));

    beforeEach(inject(function ($controller, _TestService_) {
        TestService= _TestService_;
        ctrl = $controller('TestAppCtrl');
    }));

    it('ctrl is defined', function () {
        expect(ctrl).toBeDefined();
    });

    it('1 + 2 equals 3', function () {
        expect(ctrl).toBeDefined();
        expect(ctrl.sum(1, 2)).toBe(3);
    });
});

第二次测试1 + 2 equals 3失败。我收到这个错误:

Message: TypeError: undefined is not a constructor (evaluating 'ctrl.sum(1, 2)') in file:///...

我已经尝试过不同的方法:在控制器上定义一个简单的变量(vm.testVar = 12345),或者甚至通过注入$scope并在其上定义变量。我也正确地将它注入测试中。这两次尝试都失败了同样的错误;就好像测试运行器无法识别控制器上的任何值,即使控制器本身已定义。

1 个答案:

答案 0 :(得分:0)

在我看来这应该有用...... 但是尝试使用作为范围的第二个参数调用$ controller()函数,如下例所示:How to test John papa vm.model unit testing with jasmine?

也许这会对范围的创建方式产生影响......