2011-12-02 60 views
0

我正在嘗試使用Jasmine測試一些backbone.js視圖(通過jasmine-headless-webkit)。除了我的haml-js模板無法在測試中訪問之外,一切運行良好。Jasmine測試運行期間找不到haml-js模板

在我看來,下面的代碼工作正常:

render: => 
    html = JST['views/avia_view_template']() 
    $(@el).html(html) 

...但是,當它運行的茉莉花規範我得到以下故障的一部分:

ReferenceError: Can't find variable: JST in /home/duncan/avia/app/assets/javascripts/views/avia_view.js.coffee 

我懷疑我在jasmine.yml中做錯了什麼。我已經明確列入仍然失敗模板文件:

src_files: 
    - "vendor/**/*.{js,coffee}" 
    - "lib/**/*.{js,coffee}" 
    - app/assets/javascripts/application.js 
    - app/assets/javascripts/avia.js 
    - app/assets/javascripts/jquery-1.6.4.js 
    - app/assets/javascripts/underscore.js 
    - app/assets/javascripts/backbone.js 
    - app/assets/javascripts/jquery.jqGrid.min.js 
    - app/assets/javascripts/views/avia_view_template.jst.hamljs 
    - app/assets/javascripts/views/avia_view.js.coffee 

也許我只是採取了錯誤的方式在這裏......我應該用茉莉花存根&模擬出調用JST和jQuery?嚴格的單元測試方法表示,我應該在這種情況下缺少模板訪問權限並不是問題。

任何提示 - 無論是我的測試方法,還是特定的JST失敗,都將不勝感激。

回答

2

不需要存根,只需要正確設置資產路徑即可。爲了充分利用鏈輪一體化的0.8.0及以上,設置您的jasmine.yml文件的最好的辦法是這樣的:

src_dir: app/assets/javascripts 
asset_paths: 
- lib/assets/javascripts 
src_files: 
- "**/*" 

這將設置在鏈輪和app/assets/javascriptslib/assets/javascripts看,並會告訴jasmine-headless-webkit將兩個目錄中的每個可能的文件都拉出來。 Jasmine的正常文件需求在這種情況下不會被使用,只是Sprockets。

然後,設置您的require聲明就像您通常在您的JS文件中一樣。因此,在 'application.js.coffee':

#= require jquery-1.6.4 
#= require avia 
#= require underscore 
#= require backbone 
#= require jquery.jqGrid.min 
#= require_tree . 

alert "Look, Internet codes!" 

而且在avia_view.js.coffee

#= require views/avia_view_template.jst.hamljs 

class window.AviaView extends Backbone.View 
    template: JST['views/avia_view_template'] 
    ... code ... 

當然,這些.hamljs模板將不會加載,除非鏈輪能力Haml的處理器已被加載。所以,你會希望有一個Gemfile中說至少有這它:

gem 'jasmine-headless-webkit' 
gem 'haml-sprockets' 
# also bring in backbone and jquery 
gem 'jquery-rails' 
gem 'backbone-rails' 

然後,如果您的應用程序本身知道你自己的拷貝做什麼時,這些vendored JS寶石被加載,你可以擺脫jQuery和Backbone,你也可以使用.hamljs模板。在這一點上,你應該運行使用捆紮機:

bundle exec jasmine-headless-webkit 

最後一件事,最好的辦法,以確保一切實際上是越來越加載時使用的列表選項:

bundle exec jasmine-headless-webkit -l 

將通過JHW的運行一切和Sprockets的文件加載器,並打印出要包含的文件的順序。這將有助於診斷require問題,因爲您總是必須在單一場景中處理Jasmine式和Sprockets式加載。設置你的src文件完全通過Sprockets加載簡化了這個過程,所以我會推薦一個類似於這個的設置。

+0

非常感謝 - 這很好。對於遵循這些說明的任何人,只需要注意一點:在撰寫本文時,「asset_paths」設置是三天前添加的,因此請確保您使用的是最新鮮的jasmine-headless-webkit代碼。我沒有,而且我一直把頭撞到桌子上一會兒,直到我明白了。 –

相關問題