2013-10-17 24 views
0

我選擇創建在接受這個問題的答案基於選項2的藥液指令控制器: Unit-testing directive controllers in Angular without making controller global如何加載在一個封閉定義到測試規範

我的代碼看起來是這樣的:

(function() { 

    function myCtrl($scope) { 
     //All my controller code. 
    }; 

    myAppModule.directive('myDirective', function($compile, $timeout) { 

     return { 

      restrict: 'E', 

      replace: true, 

      controller: myCtrl, 

      compile: function(tElement, tAttrs, transclude) { 

       return { 
       post: function(scope, element, attrs) { 
        //more code and stuff. 
       } 
      } 
     } 
    }); 
})(); 

我簡單的問題;因爲控制器未在模塊的範圍界定,如何加載它在我的測試文件?

回答

0

的答案解釋,您必須在三個文件上面拆分代碼:

  • 前綴與所有代碼高達function myCtrl($scope) {
  • 控制器代碼
  • 後綴

在構建應用程序,可以將這三個文件連接成一個並將結果用於生產代碼。

對於測試,只需簡單的中間文件。這確實會在測試的全局名稱空間中創建您的控制器。在生產守則中,封閉避免了這種污染。

+0

沒錯,所以我的解決方案不能加載到測試套件中,因爲它已經包裝在封閉體中,因此即使在加載時也不可見?在這種情況下,我會選擇選項1. – Stevo

+0

沒錯。在我自己的代碼中,我經常只用一個符號來污染全局名稱空間,並將所有內容都放入該名稱空間中 - 這只是使用angularjs模塊系統的一種變體。 –