Rya*_*igg 5 cucumber ruby-on-rails-3
我现在正在写一本关于 Rails 3 的书,过去的我已经在第 3 章左右写过,所以当运行特定功能时会生成路由错误。现在,我不像我去写不真实的东西,所以我很确定这在过去发生过一次。
我还没有能够自己复制这个场景,但我非常有信心它是环境文件中被遗忘的设置之一。
要复制此问题:
public/index.html
文件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
Run Code Online (Sandbox Code Playgroud)
当您使用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 middleware
和来确认rake 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
返回“Not Found”文本,状态为 404。
我会责怪人们并为你解决问题。这是这里的条件: https: //github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L159。如果设置为 true,则错误会被正确转换,但我们会得到错误页面输出。如果为 false,则根本不会加载该中间件。坚持,稍等 ...
更新:要清除前一个块,您就进入了死胡同。如果您设置action_dispatch.show_exceptions
为false
,则不会加载该中间件,从而导致rack-mount
渲染时出现 404 错误。然而,如果您设置action_dispatch.show_exceptions
为true
,该中间件将被加载,但它将挽救错误并为您呈现一个漂亮的“异常”页面。
归档时间: |
|
查看次数: |
2703 次 |
最近记录: |