42

「:js => true」を追加すると、多くのテストで同様のエラーが発生します。例えば:

    An error occurred in an after hook
      ActionController::RoutingError: No route matches [GET] "/assets"
      occurred at /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'

私はこれまでアプリでJavaScript対応のものをテストしたことがなく、Capybara2にアップグレードしてDatabaseCleanerをインストールすることでテストするように設定しただけです。config.use_transactional_fixtures = falseであり、ここで受け入れられた回答から直接コピーしたspec_helperファイルにいくつかの前後のフック(フック?)を追加しました。

私が実行している:

  • Rails 3.2.5
  • Rspec-rails2.12.2。

誰かが私がこれを攻撃する方法について私を手がかりにできますか?どうもありがとう!

    4) Event pages 'CREATE' submitting a valid form provides a success notification and displays new event's page 
    Failure/Error: Unable to find matching line from backtrace
    ActionController::RoutingError:
    No route matches [GET] "/assets"
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/rails/rack/logger.rb:26:in `call_app'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/rails/rack/logger.rb:16:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/request_id.rb:22:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/runtime.rb:17:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/activesupport-3.2.5/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/lock.rb:15:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/static.rb:62:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/rails/engine.rb:479:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/rails/application.rb:220:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/builder.rb:134:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:64:in `block in call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `each'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/bundler/gems/capybara-8368069cfd05/lib/capybara/server.rb:19:in `call'
    # /Users/appletart/.rvm/gems/ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:in `service'
    # /Users/appletart/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    # /Users/appletart/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    # /Users/appletart/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
4

4 に答える 4

46

欠落しているルートは、入力がnilの自動生成されたアセットパスのように見えます。あなたのアセットがあなたのcss/sassまたはこのルートがどこから来たのかで正しく指定されていると確信していますか?

アセットパスがルーティングエラーを引き起こしたという同様の問題に苦しんでいます

  1) user signup: [ JS ] : creates User on successful signup
     Failure/Error: Unable to find matching line from backtrace
     ActionController::RoutingError:
       No route matches [GET] "/assets/images/leftArrow.png"

その後に、実質的に同じスタックトレースが続きます。私の場合、アセットが実際に欠落していることが判明しました(これは、私のdevelopment.logとテスト環境では、最近まで数か月のアイドル状態の後にプロジェクトを無謀に「バンドル更新」していました)

その過程で、Capybaraのapp_hostとアセットの処理、さまざまな環境でのアセットのプリコンパイル、Application.configure.assets。[debug | digest | ...]などについて多くのことを学びました。これは、おそらく最初に検索する必要がある場所です。 。または、sprockets / sass-rails urlヘルパーで...結局のところ、欠落しているルートは、空の入力を持つ自動生成されたアセットパスのように見えます)

上記が役に立たない場合は、environments/test.rbに次の行を追加することで回避策を見つけることができます。

config.action_dispatch.show_exceptions = true

問題に直接対処していませんが、私の場合は問題をうまく抑制しました。

別の種類の回避策は、spec_helper.rbにあります。

 ActionController::Base.asset_host = "http://myapp.dev"

ここで、myapp.devは開発モードで実行中のmyAppのインスタンスであり、アセットを配信するか、少なくともアセットのテストルーティングにヒットしませんが、おそらく完全に絶望的にのみこれを実行する必要があります。これは、 http://johnbintz.github.com/blog/2012/01/07/cucumber-capybara-asset-pipeline-debug-mode/で説明されているように、アセットのコンパイルを回避する戦略に触発されています。

また潜在的に役立つ:http: //guides.rubyonrails.org/asset_pipeline.html http://rubydoc.info/github/jnicklas/capybara/master/Capybara#configure-class_method

于 2013-02-18T20:48:28.883 に答える
24

私の場合、追加:

config.assets.debug = true

それをconfig/environments/test.rb修正しました。

ドキュメントでは、次のように述べられています。

test.rb を変更する必要はありません。テスト環境のデフォルトは、config.assets.compile が true で、config.assets.compress、config.assets.debug、および config.assets.digest が false です。

しかし、少なくとも私の場合は、それを変更する必要がありました...なぜそれが機能するのかを誰かが正確に説明できれば、私はうれしいです...

于 2013-06-17T10:26:03.907 に答える