【问题标题】:Why does rspec-rails skip the middleware?为什么 rspec-rails 跳过中间件?
【发布时间】:2013-02-08 05:05:20
【问题描述】:

我有一个 Rails 应用程序 (3.2.12),我想通过 HTTP Accept-Language 标头添加语言环境切换。

我为此做了什么:

我将 rack-contrib 添加到我的 Gemfile:

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

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

config.middleware.use Rack::Locale

并检查请求环境我的控制器:

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 中间件?

【问题讨论】:

    标签: ruby-on-rails-3 rack rspec-rails rack-middleware


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多