2017-03-22 59 views
0

我在過去的幾天裏看過所有的和互聯網,我無法弄清楚我錯過了什麼。 (Angular 1.4.7)Angular 1.x在測試中嘲笑依賴關係

我正在處理的應用程序很大,而且每個控制器往往有很多依賴關係;本地服務和第三方。我嘲笑模塊,並注入依賴關係。但是,我發現如果我不嘲笑那些依賴關係被註冊的模塊,我會得到「[$ injector:unpr]未知提供者:」錯誤。更糟糕的是,這些依賴關係可能還有其他依賴關係,現在我要去掉一個「angular.mock.module」的兔子洞 - 所有這些。如果我設法模擬所有模塊,它就可以工作。

我確定這是不正確的,但沒有博客文章,現有的規範文件或視頻提到類似的問題。我肯定錯過了什麼。無論我使用ngMock還是像BardJS這樣的助手,都會發生這種情況。

我明白嘲笑服務的概念,但我認爲這不適用於此。我不會潛入角度的UI引導程序,並開始嘲笑一切。下面的測試按原樣進行。如果控制器中存在另一個依賴關係,例如「DataService」,我將不得不嘲笑它的模塊以及它的所有依賴模塊。提前致謝!我知道這一定很簡單。

describe("HomeController", function() { 
     beforeEach(angular.mock.module("app.home")); 
     beforeEach(angular.mock.module("app.notify")); 
     beforeEach(angular.mock.module("ngDialog")); 
     describe("controller", function() { 
      var scope; 
      var controller; 
      var HomeController; 
      beforeEach(inject(function($rootScope, _Notify_, _ngDialog_, $controller) { 
       scope = $rootScope.$new(); 
       controller = $controller; 
       HomeController = controller("HomeController", { 
        $scope: scope 
       }); 
       Notify = _Notify_; 
       ngDialog = _ngDialog_; 
      })); 
      it('should exist', function() { 
       expect(HomeController).to.be.defined; 
      }) 
     }); 

回答

0

好的我想通了我失蹤了。

而不是分別模擬每個子模塊,我需要模擬整個頂級應用程序模塊。

所以這上面:

beforeEach(angular.mock.module("app.home")); 
beforeEach(angular.mock.module("app.notify")); 
beforeEach(angular.mock.module("ngDialog")); 

變爲:

beforeEach(angular.mock.module("app")); 

謝謝我!

相關問題