我正在尝试使用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
并在其上定义变量。我也正确地将它注入测试中。这两次尝试都失败了同样的错误;就好像测试运行器无法识别控制器上的任何值,即使控制器本身已定义。
答案 0 :(得分:0)
在我看来这应该有用...... 但是尝试使用作为范围的第二个参数调用$ controller()函数,如下例所示:How to test John papa vm.model unit testing with jasmine?
也许这会对范围的创建方式产生影响......