Включение Rails-тестов в известность о промежуточном программном обеспечении Rack вне внутренней цепочки Rails

Контекст : приложение использует часть промежуточного программного обеспечения Rack, которое должно быть установлено в config.ru, а не внутреннюю цепочку промежуточного программного обеспечения Rails. Это происходит по причинам, не относящимся к данному вопросу.

Вопрос : как мне сделать мои тесты (функциональные и интеграционные) осведомленными об этом промежуточном программном обеспечении?

Я приведу пример. Давайте создадим безупречное приложение Rails 3, используя перезапись стойки в целях иллюстрации.

# /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 в своем браузере. Просто тесты не знают об этой настройке стойки.

16
задан pablobm 30 December 2011 в 15:49
поделиться