2013-02-22 62 views
0

我有一個Rails應用程序(3.2.12),我想通過HTTP Accept-Language頭添加區域設置切換。爲什麼rspec-rails跳過中間件?

我做了什麼做到這一點:

我加了機架的contrib我的Gemfile:

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,它在run MyApp::Application.routes之前列出了Rack::Locale

經過一番調試,我發現,中間件是從來沒有所謂的,當我運行

rspec spec/controllers/authentication_controller_spec.rb 

但是:script/rails s thin運行相同的代碼給了我更多的鍵在請求ENV,即:

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

所以,我想問題是:爲什麼RSpec拒絕拿起Rack中間件?

回答

3

控制器規格不通過堆棧,他們幾乎直接調用控制器本身。您可能想要使用Rspec的請求類型測試。