У меня есть приложение Rails (3.2.12), в котором я хотел добавить коммутацию локалей через HTTP-заголовок Accept-Language.Почему rspec-rails пропускает промежуточное ПО?
Что я сделал, чтобы добиться того, что:
Я добавил стойка-вно к моему 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
, он перечисляет 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?