提交 78a5124b 编写于 作者: A Aaron Patterson

add a new constructor for allocating test requests

上级 db41f33d
......@@ -14,6 +14,18 @@ def self.new_session
TestSession.new
end
# Create a new test request with default `env` values
def self.create
env = {}
env = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
new(default_env.merge(env), new_session)
end
def self.default_env
DEFAULT_ENV
end
private_class_method :default_env
def initialize(env, session)
super(env)
......@@ -70,12 +82,6 @@ def recycle!
@fullpath = @ip = @remote_ip = @protocol = nil
@env['action_dispatch.request.query_parameters'] = {}
end
private
def default_env
DEFAULT_ENV
end
end
class TestResponse < ActionDispatch::TestResponse
......@@ -516,7 +522,7 @@ def setup_controller_request_and_response
end
end
@request = build_request({}, TestRequest.new_session)
@request = TestRequest.create
@request.env["rack.request.cookie_hash"] = {}.with_indifferent_access
@response = build_response @response_klass
@response.request = @request
......@@ -527,10 +533,6 @@ def setup_controller_request_and_response
end
end
def build_request(env, session)
TestRequest.new(env, session)
end
def build_response(klass)
klass.new
end
......
......@@ -183,7 +183,7 @@ def recognized_request_for(path, extras = {}, msg)
end
# Assume given controller
request = build_request({}, ActionController::TestRequest.new_session)
request = ActionController::TestRequest.create
if path =~ %r{://}
fail_on(URI::InvalidURIError, msg) do
......
......@@ -10,11 +10,17 @@ class TestRequest < Request
"rack.request.cookie_hash" => {}.with_indifferent_access
)
def initialize(env)
# Create a new test request with default `env` values
def self.create(env = {})
env = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
super(default_env.merge(env))
new(default_env.merge(env))
end
def self.default_env
DEFAULT_ENV
end
private_class_method :default_env
def request_method=(method)
@env['REQUEST_METHOD'] = method.to_s.upcase
end
......@@ -59,11 +65,5 @@ def accept=(mime_types)
@env.delete('action_dispatch.request.accepts')
@env['HTTP_ACCEPT'] = Array(mime_types).collect(&:to_s).join(",")
end
private
def default_env
DEFAULT_ENV
end
end
end
......@@ -2,7 +2,7 @@
class TestRequestTest < ActiveSupport::TestCase
test "sane defaults" do
env = ActionDispatch::TestRequest.new({}).env
env = ActionDispatch::TestRequest.create.env
assert_equal "GET", env.delete("REQUEST_METHOD")
assert_equal "off", env.delete("HTTPS")
......@@ -27,7 +27,7 @@ class TestRequestTest < ActiveSupport::TestCase
end
test "cookie jar" do
req = ActionDispatch::TestRequest.new({})
req = ActionDispatch::TestRequest.create({})
assert_equal({}, req.cookies)
assert_equal nil, req.env["HTTP_COOKIE"]
......@@ -55,38 +55,38 @@ class TestRequestTest < ActiveSupport::TestCase
test "does not complain when Rails.application is nil" do
Rails.stubs(:application).returns(nil)
req = ActionDispatch::TestRequest.new({})
req = ActionDispatch::TestRequest.create({})
assert_equal false, req.env.empty?
end
test "default remote address is 0.0.0.0" do
req = ActionDispatch::TestRequest.new({})
req = ActionDispatch::TestRequest.create({})
assert_equal '0.0.0.0', req.remote_addr
end
test "allows remote address to be overridden" do
req = ActionDispatch::TestRequest.new('REMOTE_ADDR' => '127.0.0.1')
req = ActionDispatch::TestRequest.create('REMOTE_ADDR' => '127.0.0.1')
assert_equal '127.0.0.1', req.remote_addr
end
test "default host is test.host" do
req = ActionDispatch::TestRequest.new({})
req = ActionDispatch::TestRequest.create({})
assert_equal 'test.host', req.host
end
test "allows host to be overridden" do
req = ActionDispatch::TestRequest.new('HTTP_HOST' => 'www.example.com')
req = ActionDispatch::TestRequest.create('HTTP_HOST' => 'www.example.com')
assert_equal 'www.example.com', req.host
end
test "default user agent is 'Rails Testing'" do
req = ActionDispatch::TestRequest.new({})
req = ActionDispatch::TestRequest.create({})
assert_equal 'Rails Testing', req.user_agent
end
test "allows user agent to be overridden" do
req = ActionDispatch::TestRequest.new('HTTP_USER_AGENT' => 'GoogleBot')
req = ActionDispatch::TestRequest.create('HTTP_USER_AGENT' => 'GoogleBot')
assert_equal 'GoogleBot', req.user_agent
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册