我是使用Jasmine测试Angular Apps的新手,我无法弄清楚这个问题的原因......
控制器
programsModule.controller('ticketCtrl', ['$scope', function ($scope) {
$scope.disableSendBtn = true;
});
这是单元测试
'use strict';
describe('app', function () {
// variables
var $rootScope, $scope, $controller;
beforeEach(module('supportModule'));
describe('ticketCtrl', function () {
beforeEach(inject(function (_$rootScope_, _$controller_) {
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
$controller = _$controller_('ticketCtrl', {
'$scope': $scope
});
}));
it('Should disable send btn', function () {
expect($scope.disableSendBtn).toEqual(true);
});
});
});
这是测试的输出
TypeError: Cannot read property 'disableSendBtn' of undefined
如果我通过
测试是否定义了$scope
变量
it('Should $scope be defined', function () {
expect($scope).toBeDefined();
});
我也得到了这个错误
Expected undefined to be defined.
那么这里的问题是什么?
HERE是jsFiddle http://jsfiddle.net/LeoAref/bn1wxycs/
修改
我在这里使用了错误的模块
beforeEach(module('app'));
我通过使用正确的模块修复了这个问题
beforeEach(module('supportModule'));
我又得到了一个错误:
Error: [ng:areq] Argument 'ticketCtrl' is not a function, got undefined
http://errors.angularjs.org/1.4.1/ng/areq?p0=ticketCtrl&p1=not%20a%20function%2C%20got%20undefined
答案 0 :(得分:0)
错误:[ng:areq]参数'ticketCtrl'不是函数,未定义
尝试实例化在beforeEach函数中初始化的模块中未定义的控制器时,通常会抛出此错误。
提供的代码似乎很好。唯一缺少的是检查业力是否成功找到您的文件。打开你的karma.conf.js文件,确保定义控制器的文件列在或使用正则表达式。