2017-09-29 4 views
3

TLをスキップし、DR -実行すくい資産:プリコンパイル含めるテストの前に:JSタグとそうでない

:jsテストがでそこに含まれている場合にのみ、単一のコマンド(例えばrake assets:precompile)を実行することが可能です実行されているテストの本体?

-

私は大rspecテストスイートを持っているレール5、ルビー2.3.1アプリを開発しています。テストを実行する前に、

$ bundle exec rake assets:precompile

は、我々は最近、私たちは実行する必要がありますする原因となったアプリケーションで webpacker宝石をインストールしました。上記のコマンドが実行されていない場合、テストは直前にプリコンパイルされたアセットに対して実行されます。

これは、開発者がこのステップを忘れてしまったため、テストスイートを実行する前に誰かがそれを実行することを覚えているまで頭を壁に向けて叩いてしまいました。

理想的には私は単純にspec/spec_helper.rbに追加したい:

config.before(:suite) do 
    system('bundle exec rake assets:precompile') 
end 

しかし、これはテストスイートまたはその中の任意のサブセットのすべての単一の実行前にプリコンパイルを実行します。これは、通常0.15秒かかる単一の要求仕様を実行しようとしているバックエンド開発者の開発時間を大幅に短縮します。

さらに、guardで開発するときには、長時間かかるので通常:jsテストをスキップします。リモートブランチに展開またはプッシュする前に、健全性チェックとして:jsの仕様を実行するだけです。オプションはbefore(:suite)のために無視されるように、いずれかの動作しません

config.before(:suite, js:true) 

残念ながら、へ{:js => true}オプションを追加。

+1

あなたは他のテストとは別に、あなたの機能テストを実行し、開発者にはないJS-関連のテストを有することができる知っているので、テストの種類ごとに最初のインスタンスで別のコマンドを定義してください可能性があります。 – hyphenbash

+0

私は@hyphenbashに同意します。特定のタイプのテストを一緒に実行できるように、rspec [tags](https://relishapp.com/rspec/rspec-core/v/3-6/docs/command-line/tag-option)を使用してください( 'bundle exec rspec - タグタイプ:js')、[それらのタグに対してのみ実行する](https://gist.github.com/linjunpop/4367228)。 – anothermh

答えて

2

:jsタグを使用してフィルタリングし、すべての仕様に対して1回実行します。

ENV[ 'ASSET_PRECOMPILE_DONE' ] = nil 

    config.before(:each, :js) do 
    if ! ENV[ 'ASSET_PRECOMPILE_DONE' ] 
     system 'bundle exec rake assets:precompile' 
     ENV[ 'ASSET_PRECOMPILE_DONE' ] = 'true' 
    end 
    end 
関連する問題