2013-12-20 60 views
2

我的services.js文件變得非常大,所以我決定最好將單個服務分成單獨的文件(service1.js,service2.js等) )。AngularJS單元測試服務分解爲單獨的文件

不幸的是,這打破了我所有的單元測試。我不再能夠將服務依賴項導入到我的測試中。我在運行我的單元測試時看到類似這樣的錯誤:

Error: [$injector:unpr] Unknown provider: Service1Provider <- Service1 

我找不到任何解決這些問題的文章。我的應用程序結構非常標準和OOTB,與angular-seed沒有什麼不同(當然每個服務的單獨文件除外)。

如果您需要更多信息,請讓我知道。

+1

確保將引用添加到js文件在html中。 – zsong

+0

感謝回覆zsong。我們在js中進行單元測試(類似於angular-seed中的servicesSpec.js) - 不使用任何html文件......至少我知道這一點。 – mtical

+1

Np。然後檢查karma.conf.js,確保你在這個文件中添加引用。 – zsong

回答

2

我目前使用@mtical,事實證明這個錯誤確實在karma.conf.js中。正如他所說的,我們將服務拆分爲多個文件,我們的主要服務文件被命名爲「service.js」。默認情況下,karma以遞歸的字母順序加載未在karma.conf.js文件中明確列出的所有js文件。

這導致我們的「service.js」文件被加載到所有其他服務文件之後,這些服務文件按字母順序列在該文件之前。不幸的是,所有這些其他服務都具有「service.js」作爲依賴項,所以當我們的測試運行時,他們無法找到我們需要的服務。

的解決方案是明確列出的在我們的karma.conf.js文件等文件遞歸裝貨前「service.js」,具體如下:

... 
files : [ 
     'app/lib/angular/angular.js', 
     'app/lib/angular/angular-*.js', 
     'test/lib/angular/angular-mocks.js', 
     'app/js/services/services.js', 
     'app/js/**/*.js', 
     'test/unit/**/*.js' 
    ], 
...