水豚测试用:JS =>真...路由错误:没有路由匹配[GET]“/资产”(Capybara t

2019-07-19 02:25发布

我发现了一个类似的错误在多项测试当我添加“:JS =>真正的”给他们。 例如:

    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的东西前,才刚刚成立升级到水豚2和安装数据库清理这样做。 config.use_transactional_fixtures =假的,我已经添加了一些前/后挂钩(挂钩?)我spec_helper文件,我已经直接从接受的答案抄在这里 。

我在跑:

  • Rails的3.2.5
  • Rspec的护栏2.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'

Answer 1:

你缺少的路线看起来有些与零输入自动生成资产路径。 你确定你的资产在正确的CSS /上海社会科学院指定或其它地方这条路线从何而来?

我一直在努力用一个类似的问题,即资产路径诱导路由错误

  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,在我的测试环境中被忽视,直到最近,我不顾一切地“捆绑更新”闲置数月后的项目)

一路上,我学到了很多关于水豚的app_host和资产处置,资产在不同的环境预编译,Application.configure.assets [调试|消化| ...]和一致好评,这可能是你应该在第一时间被搜索。 或链轮/ SASS护栏网址助手......之后,你的所有丢失的路线仍然看起来有些空输入自动生成资产路径)

如果上述不帮助解决方法可能会增加在环境中的以下行/ test.rb:

config.action_dispatch.show_exceptions = true

虽然不能直接解决问题,成功地抑制它在我的情况。

另一种解决办法的可能是spec_helper.rb:

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

其中myapp.dev处于开发模式,它提供的资产或至少不打你的测试路由的资产对myApp的运行实例,但可能应该只有在完全desparation做到这一点。 它是由战略的启发,以避免资产编译在解释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



Answer 2:

在我的情况下,添加:

config.assets.debug = true

config/environments/test.rb固定它。

在文档 ,有人说:

你不应该需要改变test.rb. 在测试环境中的默认值是:config.assets.compile真实,config.assets.compress,config.assets.debug和config.assets.digest都是假的。

但是,至少在我的情况,我需要改变它,如果还有人能确切地解释为什么它的作品,我会很高兴...



Answer 3:

就我而言,我越来越

 Failure/Error: Unable to find matching line from backtrace
 ActionController::RoutingError:
   No route matches [GET] "/favicon.ico"

我已经把一个空文件下的favicon.ico应用程序/资产/图像,因此开发服务器是罚款。 但是,测试环境不知道如何处理资产在这种情况下。 我找到了解决方法是把(而不是使用不同的服务器来服务静态资产)的静态服务。 当然,代价是性能。

  in environments/test.rb, set
  config.serve_static_assets = true # default is false


Answer 4:

在我的情况下,默认缺失图像设置为指向S3。 我真的不关心,如果图像加载与否。 PhantomJs有一个选项通过命令行参数来禁用图像加载--load-images=no

Poltergeist ,注册驱动程序时,这可能是设置:

Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, :phantomjs_options => ['--load-images=no']) end



文章来源: Capybara tests with :js=>true… Routing Error: No route matches [GET] “/assets”