提交 f32cf448 编写于 作者: J Joshua Peek

Switch functional tests to run through the rack interface instead of process

上级 a8b75c48
...@@ -371,10 +371,7 @@ def session ...@@ -371,10 +371,7 @@ def session
class << self class << self
def call(env) def call(env)
# HACK: For global rescue to have access to the original request and response new.call(env)
request = env["action_controller.rescue.request"] ||= ActionDispatch::Request.new(env)
response = env["action_controller.rescue.response"] ||= ActionDispatch::Response.new
process(request, response)
end end
# Factory for the standard create, process loop where the controller is discarded after processing. # Factory for the standard create, process loop where the controller is discarded after processing.
...@@ -511,6 +508,13 @@ def exempt_from_layout(*types) ...@@ -511,6 +508,13 @@ def exempt_from_layout(*types)
end end
public public
def call(env)
# HACK: For global rescue to have access to the original request and response
request = env["action_dispatch.rescue.request"] ||= ActionDispatch::Request.new(env)
response = env["action_dispatch.rescue.response"] ||= ActionDispatch::Response.new
process(request, response).to_a
end
# Extracts the action_name from the request parameters and performs that action. # Extracts the action_name from the request parameters and performs that action.
def process(request, response, method = :perform_action, *arguments) #:nodoc: def process(request, response, method = :perform_action, *arguments) #:nodoc:
response.request = request response.request = request
......
...@@ -80,7 +80,7 @@ def _call(env) ...@@ -80,7 +80,7 @@ def _call(env)
Routing::Routes.call(env) Routing::Routes.call(env)
rescue Exception => exception rescue Exception => exception
if controller ||= (::ApplicationController rescue Base) if controller ||= (::ApplicationController rescue Base)
controller.call_with_exception(env, exception).to_a controller.call_with_exception(env, exception)
else else
raise exception raise exception
end end
......
...@@ -62,7 +62,7 @@ module ClassMethods ...@@ -62,7 +62,7 @@ module ClassMethods
def call_with_exception(env, exception) #:nodoc: def call_with_exception(env, exception) #:nodoc:
request = env["action_controller.rescue.request"] ||= ActionDispatch::Request.new(env) request = env["action_controller.rescue.request"] ||= ActionDispatch::Request.new(env)
response = env["action_controller.rescue.response"] ||= ActionDispatch::Response.new response = env["action_controller.rescue.response"] ||= ActionDispatch::Response.new
new.process(request, response, :rescue_action, exception) new.process(request, response, :rescue_action, exception).to_a
end end
end end
......
...@@ -430,7 +430,7 @@ def raise_named_route_error(options, named_route, named_route_name) ...@@ -430,7 +430,7 @@ def raise_named_route_error(options, named_route, named_route_name)
def call(env) def call(env)
request = ActionDispatch::Request.new(env) request = ActionDispatch::Request.new(env)
app = Routing::Routes.recognize(request) app = Routing::Routes.recognize(request)
app.call(env).to_a app.call(env)
end end
def recognize(request) def recognize(request)
......
...@@ -35,12 +35,13 @@ def assign_parameters(controller_path, action, parameters) ...@@ -35,12 +35,13 @@ def assign_parameters(controller_path, action, parameters)
end end
data = params.to_query data = params.to_query
@env['CONTENT_LENGTH'] = data.length @env['CONTENT_LENGTH'] = data.length.to_s
@env['rack.input'] = StringIO.new(data) @env['rack.input'] = StringIO.new(data)
end end
def recycle! def recycle!
@env.delete_if { |k, v| k =~ /^(action_dispatch|rack)\.request/ } @env.delete_if { |k, v| k =~ /^(action_dispatch|rack)\.request/ }
@env.delete_if { |k, v| k =~ /^action_dispatch\.rescue/ }
@env['action_dispatch.request.query_parameters'] = {} @env['action_dispatch.request.query_parameters'] = {}
end end
end end
...@@ -132,7 +133,15 @@ def process(action, parameters = nil, session = nil, flash = nil, http_method = ...@@ -132,7 +133,15 @@ def process(action, parameters = nil, session = nil, flash = nil, http_method =
Base.class_eval { include ProcessWithTest } unless Base < ProcessWithTest Base.class_eval { include ProcessWithTest } unless Base < ProcessWithTest
response = Rack::MockResponse.new(*@controller.process(@request, ActionDispatch::Response.new).to_a) env = @request.env
app = @controller
# TODO: Enable Lint
# app = Rack::Lint.new(app)
status, headers, body = app.call(env)
response = Rack::MockResponse.new(status, headers, body)
@response.request, @response.template = @request, @controller.template @response.request, @response.template = @request, @controller.template
@response.status, @response.headers, @response.body = response.status, response.headers, response.body @response.status, @response.headers, @response.body = response.status, response.headers, response.body
@response @response
......
...@@ -16,6 +16,7 @@ def initialize(env = {}) ...@@ -16,6 +16,7 @@ def initialize(env = {})
def env def env
write_cookies! write_cookies!
delete_nil_values!
super super
end end
...@@ -74,5 +75,9 @@ def write_cookies! ...@@ -74,5 +75,9 @@ def write_cookies!
@env['HTTP_COOKIE'] = @cookies.map { |name, value| "#{name}=#{value};" }.join(' ') @env['HTTP_COOKIE'] = @cookies.map { |name, value| "#{name}=#{value};" }.join(' ')
end end
end end
def delete_nil_values!
@env.delete_if { |k, v| v.nil? }
end
end end
end end
...@@ -111,7 +111,7 @@ def test_should_cache_with_trailing_slash_on_url ...@@ -111,7 +111,7 @@ def test_should_cache_with_trailing_slash_on_url
end end
def test_should_cache_ok_at_custom_path def test_should_cache_ok_at_custom_path
@request.stubs(:path).returns("/index.html") @request.request_uri = "/index.html"
get :ok get :ok
assert_response :ok assert_response :ok
assert File.exist?("#{FILE_STORE_PATH}/index.html") assert File.exist?("#{FILE_STORE_PATH}/index.html")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册