2016-11-18 57 views
1

我收到错误性质“$范围”:摩卡 - 类型错误:无法读取的不确定

类型错误:在$控制器无法读取属性未定义
“$范围”(bower_components /角/ 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; 
     }); 
    }); 

控制器,它正在测试不需要$范围,测试在同一模块中通过精细其它控制器。

回答

2

这是一个误导性的错误。

当控制器被实例化运行角度以下代码(从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'变量(可以为null)读取$ scope。

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

相关问题