2016-01-04 16 views
1

我對angularjs很陌生,我試圖用Jasmine和Karma測試一個應用程序。如果我只是使用Jasmine提供的基本框架(使用SpecRunner.html),但測試工作正常,但是當我嘗試使用Karma時,我仍然得到相同的'模塊未定義'消息。在karma.conf.jsKarma的另一個'模塊沒有定義'

我的文件相關如下:

files: [ 
    '../../js/angular.min.js', 
    '../../js/angular-sanitize.min.js', 
    'lib/angular-mocks.js', 
    '../../js/app.js', 
    'lib/jasmine-2.4.1/jasmine.js', 
    'lib/jasmine-2.4.1/jasmine-html.js', 
    'lib/jasmine-2.4.1/boot.js', 
    'lib/jquery-1.11.3.min.js', 
    'spec/spec.js' 
] 

到目前爲止,這看起來很像我已經看到了,因此所有以前的業力未定義模塊的問題,但我敢肯定包含angular-mocks.js,文件位置正確,並且我沒有使用任何其他可能覆蓋karma.conf.js的框架。我很抱歉再次問同樣的問題,但我在這裏錯過了一些非常明顯的事情嗎?

+1

什麼是你得到確切的錯誤信息? –

+0

@Jon'ReferenceError:模塊未定義',可以追溯到angular-mocks.js和jasmine。我會發佈一個更全面的跟蹤,但我似乎無法在遵循Nocomm的解決方案後重現錯誤... – tintoyOG9

回答

1

我在過去曾遇到類似的問題。對依賴關係進行排序的順序很挑剔。例如,如果您使用的是JQuery和Angular,那麼Karma會在Angular之前使用JQuery。我看到你在所有子模塊之前放置了Angular,這很棒。

我將使依賴順序如下:

files: [ 
    'lib/jquery-1.11.3.min.js', 
    '../../js/angular.min.js', 
    '../../js/angular-sanitize.min.js', 
    'lib/angular-mocks.js', 
    'lib/jasmine-2.4.1/jasmine.js', 
    'lib/jasmine-2.4.1/jasmine-html.js', 
    'lib/jasmine-2.4.1/boot.js', 
    '../../js/app.js', 
    'spec/spec.js' 
] 

我採用了棱角分明模塊的微細化以及unminified版本在同一應用程序也有問題。例如,如果你想使用縮小版本的Angular,那麼確保它的所有子模塊都被縮小了。我會說任何JavaScript依賴關係相同。保持一致。

+0

這樣的問題是值得考慮使用RequireJS的原因,即使僅用於您的測試。 Karma模塊必須加載所有這些腳本文件,並按要求的依賴關係順序加載。一旦你遇到兩個不同模塊使用衝突依賴的情況(這對整個應用程序來說很好),你會看到需要RequireJS。 –

+0

這是一個很好的觀點。很難跟上所有的JS工具和框架。只有很多人沒有時間去研究/使用RequireJS。 – Healforgreen

+0

當我意識到在配置文件中使用通配符導致我的某些js按錯誤順序加載時,我以爲我之前很聰明,但我從來沒有想過jQuery是它的一部分!那麼,我都改變了我的依賴順序,並指出了angular.js的未分版本,這似乎解決了模塊問題。但由於某些原因,即使在恢復這些更改後,我也無法重現該錯誤。我得到了一個「TypeError:無法讀取屬性'$注入'空'消息,但我想這是我不得不弄清的其他東西。謝謝您的幫助! – tintoyOG9

相關問題