2013-02-22 2 views
0

У меня есть приложение 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?

ответ

3

Спецификации контроллера не проходят через стек, они в значительной степени вызывают непосредственно на контроллер. Вероятно, вы захотите использовать тесты типа запроса Rspec.