質問

Jasmineを使用してバックボーンのビューをテストしようとしています(Jasmine-Headless-Webkit経由)。私の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

たぶん、私はここで間違ったアプローチを取っているだけです...私はJasmineを使用してJSTとJQueryへの呼び出しを模索しているべきですか?厳密にユニットテストアプローチは、私がすべきだと言っています。その場合、テンプレートアクセスの欠如は問題ではありません。

すべてのヒント - テストへの私のアプローチ、または特定のJST障害のいずれかを大歓迎します。

役に立ちましたか?

解決

スタブする必要はありません。資産パスを正しく設定するだけです。 0.8.0以上でSprocketsの統合を活用するために、Jasmine.ymlファイルをセットアップする最良の方法は次のようになります。

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

これにより、スプロケットが設定されます app/assets/javascriptslib/assets/javascripts, 、そしてJasmine-Headless-Webkitに、両方のディレクトリのすべての可能なファイルをプルするように指示します。この場合、Jasmineの通常のファイルは使用されません。スプロケットだけです。

次に、セットアップします 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'

次に、アプリケーション自体がこれらのベンダーのJS宝石がロードされたときに何をすべきかを知っている場合、JQueryとBackboneのコピーを取り除くことができます。 .hamljs 利用可能なテンプレート。その時点で、Bundlerを使用して実行する必要があります。

bundle exec jasmine-headless-webkit

最後に、すべてが実際にロードされていることを確認する最良の方法は、リストオプションを使用することです。

bundle exec jasmine-headless-webkit -l

これにより、JHWとSprocketsのファイルローダーを通じてすべてが実行され、含まれるファイルの順序が印刷されます。これは診断に役立ちます require 問題は、単一のシナリオでジャスミンスタイルとスプロケットスタイルのロードの両方に常に対処する必要があるためです。 SRCファイルを完全にロードするように設定して、Sprocketsを介してプロセスを大幅に簡素化するため、このようなセットアップをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top