我刚刚安装了Yeoman并创建了我的第一个项目。我试图让我的头围测试由Yo创建的默认角度项目。当我调用“grunt服务器”时项目运行正常,但是当我运行单元测试“grunt test:unit”时,我得到错误“Argument'MainCtrl'不是函数,未定义”。
为了让这个测试正常运行,我缺少什么?
再次感谢
- 控制器
'use strict';
angular.module('myApp')
.controller('MainCtrl', function ($scope) {
$scope.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma',
'mytest'
];
});
- unti test
'use strict';
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('myApp'));
var MainCtrl,
scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function () {
expect(scope.awesomeThings.length).toBe(4);
});
});
答案 0 :(得分:3)
如果我复制并粘贴此代码,则执行时没有问题。您收到的错误消息表明进样器不知道控制器(名称)。您是否忘记在 karma.conf.js 中包含控制器javascript文件?
答案 1 :(得分:0)
就我而言,它是“app.js”的副本,导致同样的错误。虽然它没有在任何地方的html页面中使用,因为grunt测试包括/ ** / *模式,它被包含在内并因此复制模块的定义,可能重置从app.js
加载的控制器。所以我得到的错误如下:
Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined
http://errors.angularjs.org/1.4.7/ng/areqp0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined
删除此文件后,一切正常。我花了很长时间才弄清楚出了什么问题,但终于找到了原因。