为什么rspecrails跳过中间件



我有一个Rails应用程序(3.2.12),我想通过HTTP Accept Language标头添加区域设置切换。

我为此做了什么:

我在我的Gemfile:中添加了机架contrib

gem 'rack-contrib', require: 'rack/contrib'

运行bundle install,将中间件添加到我的config/application.rb:

config.middleware.use Rack::Locale

并检查请求env我的控制器:

puts request.env.keys.select{|v| v=~/rack/ }

我运行的规范是一个控制器规范,其中有render_views

我的问题:

请求环境中没有rack.locale密钥。我仔细检查了rake middlware,它在末尾列出了Rack::Locale,就在run MyApp::Application.routes之前。

经过一些调试,我发现当我运行时,中间件从未被调用

rspec spec/controllers/authentication_controller_spec.rb

但是:script/rails s thin中运行相同的代码会在请求环境中为我提供更多的密钥,即:

rack.request.cookie_string
rack.locale
rack.request.query_string
rack.request.query_hash

所以,我想问题是:为什么RSpec拒绝购买Rack中间件

控制器规范不通过堆栈,它们几乎直接调用控制器本身。对此,您可能需要使用Rspec的请求类型测试。

相关内容

  • 没有找到相关文章

最新更新