2017-07-19 2 views
0

チュートリアルhereに従ってきましたが、新しいコードに関連するテストを行うことができません。私が手Rails 5:env.find_assetをテストで使用することができません

env = if Rails.application.assets.is_a?(Sprockets::Index) 
    Rails.application.assets.instance_variable_get('@environment') 
else 
    Rails.application.assets 
end 

asset = env.find_asset(tmp_asset_name) 

正確なエラーがある:Railsは文句ところ具体的には、これは

undefined method `find_asset' for nil:NilClass 

`ENVは、テスト環境ではnilであることの背後にある理由は何ですか? (注:私はminitest_railsを使用しています)

+0

は 'Rails.applicationです.assets' nil? – Dbz

+0

ifステートメントの最初のビットのコードが起動するので、 'is_a'(Sprockets :: Index)です。 Rails.application.assetsはnilではありませんが、@environmentでinstance_variable_getメソッドを使用するとnilが返されます。 – mycellius

答えて

1

assets.compile = falseスプロケットはあなたが使用できるテスト環境では無効になっ

です:

Rails.application.assets_manifest.find('cable.js').first 
=> #<Sprockets::Asset:3ff35fce4248 "file:///" ... > 

の代わりに:

# asset = env.find_asset(tmp_asset_name) 
asset = Rails.application.assets_manifest.find(tmp_asset_name).first 
+0

私の例では、そのコード行をどのように使用するのか説明できますか? – mycellius

+0

私は自分の答えを更新@mycellius –

+0

ありがとう、それは素晴らしい作品です。テスト環境が使用されているかどうかを確認するには、どのように条件を実行しますか? devで 'find_asset'を使用し、テストで' find(file).first'を使用するには – mycellius

関連する問題