背景: 应用程序使用了一段Rack中间件,必须在config.ru中进行设置,而不是Rails内部中间件链。这是由于本问题无关的原因。
问题: 如何使我的测试(功能和集成)了解此中间件?
我将通过一个示例进行说明。让我们创建一个全新的Rails 3应用程序,使用rack-rewrite来举例说明。
很酷,现在让我们在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设置的情况。