ジャスミンテストの実行中にHAML-JSテンプレートが見つかりません
-
27-10-2019 - |
質問
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/javascripts
と lib/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を介してプロセスを大幅に簡素化するため、このようなセットアップをお勧めします。