繁体   English   中英

Mocha-TypeError:无法读取未定义的属性“ $ scope”

[英]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 /客户端/应用程序/同行审查/后visit.controller.spec.js:11:18)

在带有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);
      }

如果在数组中找不到控制器,它将运行一个吸气剂,尝试从“ locals”变量(可以为null)中读取$ scope。

如果控制器未包含在测试的索引文件中,则它将不在数组中。 包含文件将解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM