Mocha - TypeError: Cannot read property '$scope' of undefined
Mocha - TypeError: Cannot read property '$scope' of undefined
我收到错误:
TypeError: 无法读取 属性 未定义的“$scope”
在 $controller (bower_components/angular/angular.js:10327:28)
在 bower_components/angular-mocks/angular-mocks.js:2221:12
在上下文中。 (src/client/app/peer-review/post-visit.controller.spec.js:11:18)
当 运行ning 使用 mocha 和 karma 在 angularJS 控制器上进行测试时。
它试图 运行 的测试初始化是:
describe('PostVisitController', function () {
var controller;
beforeEach(function () {
bard.appModule('app.peer-review');
bard.inject('$controller', '$log');
controller = $controller('PostVisitController');
});
bard.verifyNoOutstandingHttpRequests();
it('should be created successfully', function () {
expect(controller).to.be.defined;
});
});
它正在测试的控制器不需要 $scope,同一模块中其他控制器的测试也顺利通过。
这是误导性错误。
实例化控制器时 angular 运行以下代码(来自 angular.js)检查控制器是否在它具有的已定义控制器列表中:
return function $controller(expression, locals, later, ident) {
var instance, match, constructor, identifier;
later = later === true;
if (ident && isString(ident)) {
identifier = ident;
}
if (isString(expression)) {
match = expression.match(CNTRL_REG);
if (!match) {
throw $controllerMinErr('ctrlfmt',
"Badly formed controller string '{0}'. " +
"Must match `__name__ as __id__` or `__name__`.", expression);
}
constructor = match[1],
identifier = identifier || match[3];
expression = controllers.hasOwnProperty(constructor) <———————— HERE
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
assertArgFn(expression, constructor, true);
}
如果在数组中找不到控制器,它会运行 getter 尝试从“locals”变量(可以为空)读取 $scope。
如果控制器没有包含在您的测试索引文件中,它就不会出现在数组中。添加该文件将解决问题。
我收到错误:
TypeError: 无法读取 属性 未定义的“$scope”
在 $controller (bower_components/angular/angular.js:10327:28)
在 bower_components/angular-mocks/angular-mocks.js:2221:12
在上下文中。 (src/client/app/peer-review/post-visit.controller.spec.js:11:18)
当 运行ning 使用 mocha 和 karma 在 angularJS 控制器上进行测试时。
它试图 运行 的测试初始化是:
describe('PostVisitController', function () {
var controller;
beforeEach(function () {
bard.appModule('app.peer-review');
bard.inject('$controller', '$log');
controller = $controller('PostVisitController');
});
bard.verifyNoOutstandingHttpRequests();
it('should be created successfully', function () {
expect(controller).to.be.defined;
});
});
它正在测试的控制器不需要 $scope,同一模块中其他控制器的测试也顺利通过。
这是误导性错误。
实例化控制器时 angular 运行以下代码(来自 angular.js)检查控制器是否在它具有的已定义控制器列表中:
return function $controller(expression, locals, later, ident) {
var instance, match, constructor, identifier;
later = later === true;
if (ident && isString(ident)) {
identifier = ident;
}
if (isString(expression)) {
match = expression.match(CNTRL_REG);
if (!match) {
throw $controllerMinErr('ctrlfmt',
"Badly formed controller string '{0}'. " +
"Must match `__name__ as __id__` or `__name__`.", expression);
}
constructor = match[1],
identifier = identifier || match[3];
expression = controllers.hasOwnProperty(constructor) <———————— HERE
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
assertArgFn(expression, constructor, true);
}
如果在数组中找不到控制器,它会运行 getter 尝试从“locals”变量(可以为空)读取 $scope。
如果控制器没有包含在您的测试索引文件中,它就不会出现在数组中。添加该文件将解决问题。