Ruby on rails 3 未找到提升路由错误

Ruby on rails 3 未找到提升路由错误,ruby-on-rails-3,cucumber,Ruby On Rails 3,Cucumber,我现在正在写一本关于Rails 3的书,过去我在第3章写过,当运行特定功能时,会产生路由错误。现在,它不像我去写那些不真实的东西,所以我很确定这在过去发生过一次 我自己还不能复制这个场景,但我很有信心它是环境文件中被遗忘的设置之一 要复制此问题,请执行以下操作: 生成一个新的rails项目 重要:删除public/index.html文件 将cucumber rails和capybara添加到您的Gemfile 运行bundle安装 运行rails:skeleton 生成一个新功能,称之为fe

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

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

要复制此问题,请执行以下操作:

  • 生成一个新的rails项目
  • 重要:删除
    public/index.html
    文件
  • 将cucumber rails和capybara添加到您的
    Gemfile
  • 运行
    bundle安装
  • 运行
    rails:skeleton
  • 生成一个新功能,称之为
    features/creating_projects.feature
  • 在该功能中,请放入:
这:

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

现在,我在
test.rb
中设置了一个将显示此异常页面的设置,但我更希望Rails对异常进行硬提升,以便它在Cucumber中显示为一个失败的步骤,就像我非常确定它过去一样,而不是一个通过的步骤


有人知道自去年5月以来Rails不这样做会有什么变化吗?我很自信这是
config/environments/test.rb
中的一些设置,但就我的一生而言,我无法理解它。

在研究Rails源代码之后,测试环境中似乎缺少负责引发异常的
ActionDispatch::ShowExceptions
中间件
ActionController::RoutingError
。通过运行
rake中间件
rake中间件RAILS\u ENV=test
进行确认

您可以在它返回的
X-Cascade=>'pass'
标题中看到,它的责任是
ActionDispatch::ShowExceptions
(在中)拾取它

因此,您看到测试用例通过的原因是
机架安装
返回“未找到”文本,状态为404


我会责怪别人,帮你修好的。这里是有条件的:。如果设置为true,则错误被正确转换,但我们得到了错误页面输出。如果为false,则根本不会加载此中间件。等一下



更新:要清除上一个块,您在这里遇到了死胡同。如果将
action\u dispatch.show\u exceptions
设置为
false
,您将无法加载该中间件,从而导致机架安装出现404错误。然而,如果您将
action\u dispatch.show\u exceptions
设置为
true
,该中间件将被加载,但它将拯救错误并为您呈现一个漂亮的“异常”页面。

在黑暗中疯狂刺痛,是“show\u exceptions”设置吗?如果是这样,这可能是一个“考虑所有请求本地”试图帮助我们的问题(在本例中失败)?我完成了提供的步骤(cumber:install而不是cumber:skeleton),我可以确认测试确实通过了。Ruby 1.9.2上的Rails 3.0.4。@TK-421:这不是
show_exceptions
设置,我将其设置为
true
,当我运行
Rails_ENV=test Rails s
时,当我转到控制器时,它会显示异常,但Cucumber不会显示异常。我很确定这是一个背景。好吧,这是一个传奇的承诺。。。最好的部分?它已在您提供的时间范围内编辑!似乎commit应该使错误被引发,而不是呈现。它是否以某种方式做了相反的事情?@Andy因此它会对其他每种情况产生错误,除了这个边缘情况,即
X-Cascade=>pass
,它是由特定的中间件处理的。一定是他们忽略了什么。很好的发现!很高兴现在已经承诺了:)
Feature: Creating projects
  In order to value
  As a role
  I want feature

Scenario: title
  Given I am on the homepage