ruby-on-rails-3 - 提升路线未找到错误

标签 ruby-on-rails-3 cucumber

我现在正在写一本关于 Rails 3 的书,过去的我已经写在第 3 章左右,所以当运行特定功能时会生成路由错误。现在,我不像我去写不真实的东西,所以我很确定这在过去发生过一次。

我还没有能够自己复制这个场景,但我非常有信心它是环境文件中被遗忘的设置之一。

要复制此问题:

  • 生成新的 rails 项目
  • 重要 : 删除 public/index.html文件
  • 将 Cucumber-rails 和 capybara 添加到您的 Gemfile 中的“测试”组中
  • 运行 bundle install
  • 运行 rails g cucumber:skeleton
  • 生成一个新特征,命名为 features/creating_projects.feature
  • 在这个功能里面放:

  • 这个:
    Feature: Creating projects
      In order to value
      As a role
      I want feature
    
    Scenario: title
      Given I am on the homepage
    

    当您使用 bundle exec cucumber features/creating_projects.feature 运行此功能时它应该失败并显示“No route matching/”错误,因为您没有定义根路由。然而,我和其他人所看到的是事实并非如此。

    现在我已经在 test.rb 中设置了一个设置这将显示此异常页面,但我宁愿 Rails 对异常进行硬引发,以便它在 Cucumber 中显示为失败的步骤,就像我很确定以前那样,而不是通过的步骤。

    有谁知道自去年 5 月以来 Rails 不这样做会发生什么变化?我非常有信心这是 config/environments/test.rb 中的一些设置,但对于我的生活,我无法弄清楚。

    最佳答案

    在我调查 Rails 源代码后,它似乎是 ActionDispatch::ShowExceptions负责引发异常的中间件 ActionController::RoutingError测试环境中缺少。通过运行确认rake middlewarerake middleware RAILS_ENV=test .

    您可以在 https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L152 中看到它回来了 X-Cascade => 'pass'标题,它是 ActionDispatch::ShowExceptions捡起它的责任(在 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L52 中)

    所以你看到你的测试用例通过的原因是因为 rack-mount正在返回“未找到”文本,状态为 404。

    我会责怪人们并为您解决问题。这是这里的条件:https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L159 .如果设置为 true,错误会被正确翻译,但我们会得到错误页面输出。如果它是假的,那么这个中间件根本不会被加载。坚持,稍等 ...

    更新 :要清除前一个块,您在这里遇到了死胡同。如果您正在设置 action_dispatch.show_exceptionsfalse ,您将无法加载该中间件,从而导致来自 rack-mount 的 404 错误被渲染。而如果您正在设置 action_dispatch.show_exceptionstrue ,该中间件将被加载,但它会挽救错误并为您呈现一个不错的“异常”页面。

    关于ruby-on-rails-3 - 提升路线未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022454/

    相关文章:

    java - cucumber AmbigouslyStepDefinitionsException

    ruby-on-rails - simple_form 有没有换行符的表单项连续出现?

    ruby-on-rails - 如何获取包含表的列名的数组

    ruby-on-rails - rails 3/Form 无模型 : How do I create a form that is not tied to a model?

    android - Calabash:如何设置测试数据

    ruby-on-rails - 使用 nginx 运行 capybara

    java - 在类路径 :/cucumberOptions 中找不到任何功能

    ruby-on-rails - Rails 3检测来自移动客户端的请求

    mysql - Ruby on rails mysql问题

    intellij-idea - intelliJ 无法识别 .feature 文件的内容