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。

如果控制器没有包含在您的测试索引文件中,它就不会出现在数组中。添加该文件将解决问题。