2017-07-19 5 views
0

Ich habe das Lernprogramm here gefolgt, konnte aber keine Tests erhalten, die mit dem neuen Code zusammenhängen. Insbesondere ist dies, wo Rails klagt:Rails 5: env.find_asset kann nicht in Tests verwendet werden

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) 

Der genaue Fehler ich erhalte, ist:

undefined method `find_asset' for nil:NilClass 

Was ist der Grund für `env nil in Testumgebungen zu sein? (Anmerkung: Ich verwende minitest_rails)

+0

ist 'Rails.application .assets'nil? – Dbz

+0

Nein. Der Code im ersten Bit der if-Anweisung wird ausgelöst, also ist es "is_a" (Rippets :: Index). Rails.application.assets ist nicht Nil, aber die Verwendung der Methode instance_variable_get mit @environment gibt nil zurück. – mycellius

Antwort

1

Wenn assets.compile = false Ritzel deaktiviert ist

In Testumgebung können Sie:

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

Anstelle von:

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

Können Sie mir erklären, wie diese Codezeile in meinem Beispiel verwendet wird? – mycellius

+0

Ich aktualisierte meine Antwort @mycellius –

+0

Vielen Dank, das funktioniert super. Wie würde man eine Bedingung ausführen, um zu überprüfen, ob das Test-Env verwendet wird? Um 'find_asset' in dev und' find (file) .first' in Test – mycellius

Verwandte Themen