我发现了一个错误:
TypeError:无法读取未定义的属性“$scope”
at $controller (bower\_components/angular/angular.js:10327:28) at bower\_components/angular-mocks/angular-mocks.js:2221:12 at Context. (src/client/app/peer-review/post-visit.controller.spec.js:11:18)当使用摩卡和业力在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,而且在同一个模块中的其他控制器上的测试也通过得很好。
发布于 2016-11-18 13:33:41
这是一个误导性错误。
当控制器被实例化时,角运行以下代码(来自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,尝试从‘局部变量’(可以是null)中读取$scope。
如果该控制器未包含在测试的索引文件中,则该控制器将不在数组中。包括该文件将解决该问题。
https://stackoverflow.com/questions/40678432
复制相似问题