2016-11-18 55 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。

如果控制器未包含在您的測試索引文件中,它將不在數組中。包括該文件將解決該問題。

相關問題