2011-12-02 16 views
0

Jasmineを使用してjasmine-headless-webkitを使用していくつかのbackbone.jsビューをテストしようとしています。私のhaml-jsテンプレートはテスト中にアクセスできないことを除いて、すべてうまくいっています。Jasmineテスト実行中にhaml-jsテンプレートが見つかりません

私の見解では、次のコードは正常に動作します:

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

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

...しかし、それは、私は、次の失敗を取得ジャスミンの仕様の一部として実行されますとき私は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に、両方のディレクトリ内のすべての可能なファイルを取得するように指示します。この場合ジャスミンの通常のファイル要求は使用されません。スプロケットのみです。

次に、通常はJSファイルのようにrequireステートメントを設定します。だから、 '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中:スプロケット対応HAMLプロセッサがロードされていない限り、

もちろん
#= require views/avia_view_template.jst.hamljs 

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

、それら.hamljsテンプレートがロードされません。だから、あなたはそれで、少なくともこれを持っていた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 -l 

JHWの通過のすべてを実行します:

bundle exec jasmine-headless-webkit 

最後に、必ずすべてが実際にロードされたばかりだ作るための最善の方法は、リストのオプションを使用することですSprocketsのファイルローダーを使用して、含まれるファイルの順序を出力します。これにより、requireの問題の診断に役立ちます.JasmineスタイルとSprocketsスタイルの両方の読み込みを常に1つのシナリオで処理する必要があるためです。 Sprocketsを介して完全にロードされるようにsrcファイルを設定すると、プロセスが簡単になるので、このような設定をお勧めします。

+0

ありがとうございました。うまくいきました。しかし、これらの指示に従っている人にとってはちょっと注意が必要です.3日前に「asset_paths」の設定が追加されましたので、非常に新鮮なジャスミン・ヘッドレスWebkitコードを使用していることを確認してください。私はそうではなく、私はそれを理解するまでしばらくの間、私の頭を机の上で叩いていました。 –

関連する問題