2014-07-24 188 views
0

我正在測試服務A,但服務A取決於服務B(例如,服務B被注入到服務A中)並且服務B取決於服務C(例如,服務C被注入到服務B)。angularjs單元測試 - 服務內部模擬服務

我試圖嘲弄服務服務B A

describe('Testing ServiceA', function() { 
    var serviceA, serviceBMock;   
     beforeEach(function() {     
      serviceBMock= { 
        get: function() { 
         return 'mockReturnValue'; 
        } 
      }; 
      angular.module('serviceAMocks', [])     
       .value('ServiceB', serviceBMock);    

     }); 
     beforeEach(module('serviceAMocks')); 
     beforeEach(inject(function (_ServiceA_){ 
      serviceA=_ServiceA_; 
      }); 

     it('Gets', function() { 
     }); 
    } 

我得到錯誤:

錯誤:[$注射器:unpr]未知提供商:serviceC提供< - ServiceC < - ServiceB < - ServiceA

如果我刪除它阻止沒有錯誤,如果我把它阻止我得到服務C依賴性錯誤。

任何幫助將不勝感激。

回答

1

您可以使用這樣的代碼,使角注入你的嘲笑售後服務(Service B)到服務A:

beforeEach(module(function($provide) { 

    var serviceBMock= { 
     get: function() { 
      return 'mockReturnValue'; 
     } 
    }; 
    $provide.constant('serviceB', serviceBMock); 
})); 
+0

我試圖和它的工作...和問題的原因是使用$提供。服務.......但我不明白爲什麼我們需要使用$ provide.constant而不是$ provide.service ??? – EnugulaS

+0

@EnugulaS我認爲可以從[本文檔的這一頁](https://docs.angularjs.org/guide/providers)收集解釋。不能肯定地說,但使用'constant()'是在Angular的「配置」階段創建服務的一種方式。所以你實際上是在Angular打了一拳並在通常創建之前創建你的模擬服務。 –