Контекст: приложение использует часть промежуточного программного обеспечения для стойки, которое должно настраиваться в config.ru, а не на внутренней промежуточной цепочке Rails. Это по причинам, не имеющим отношения к этому вопросу.
Вопрос: как мне сделать мои тесты (функциональные и интеграционные) об этом промежуточном программном обеспечении?
Я воспользуюсь примером. Позвольте создать нетронутое приложение Rails 3, используя rack-rewrite для иллюстрации.
# /config/initializers/example.rb
Rails.application.middleware.insert 0, 'Rack::Rewrite' do
r301 '/so', 'http://stackoverflow.com'
end
# /test/integration/the_test.rb
require 'test_helper'
class TheTest < ActionDispatch::IntegrationTest
test "redirect from /so to http://stackoverflow.com" do
get '/so'
assert_redirected_to 'http://stackoverflow.com'
end
end
Если вы выполните вышеуказанный тест, все будет хорошо, и в браузере вы можете подтвердить, что посещение пути /so
действительно перенаправит вас на StackOverflow.
Прохладный, давайте теперь настроим это вне Rails. Удалите файл /config/initializers/example.rb
, описанный выше, и измените config.ru
на следующее:
# /config.ru
require ::File.expand_path('../config/environment', __FILE__)
map '/so' do
run Rack::Rewrite do
r301 '', 'http://stackoverflow.com'
end
end
map '/' do
run Deleteme::Application
end
Теперь тест перестанет работать. Функциональность действительно работает, о чем свидетельствует, если вы посещаете /so
в своем браузере. Это только то, что тесты не знают об установке Rack.