Ruby on rails 3 未找到提升路由错误
我现在正在写一本关于Rails 3的书,过去我在第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项目
- 重要:删除
文件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