ОБНОВЛЕНИЕ:
После изучения исходного кода тестирования рельсов я придумал следующее:
def process_with_query(action, query_string="", parameters = nil, session = nil, flash = nil, http_method = 'GET')
# Sanity check for required instance variables so we can give an
# understandable error message.
%w(@routes @controller @request @response).each do |iv_name|
if !(instance_variable_names.include?(iv_name) || instance_variable_names.include?(iv_name.to_sym)) || instance_variable_get(iv_name).nil?
raise "#{iv_name} is nil: make sure you set it in your test's setup method."
end
end
@request.recycle!
@response.recycle!
@controller.response_body = nil
@controller.formats = nil
@controller.params = nil
@html_document = nil
@request.env['REQUEST_METHOD'] = http_method
parameters ||= {}
@request.assign_parameters(@routes, @controller.class.name.underscore.sub(/_controller$/, ''), action.to_s, parameters)
@request.session = ActionController::TestSession.new(session) unless session.nil?
@request.session["flash"] = @request.flash.update(flash || {})
@request.session["flash"].sweep
@controller.request = @request
@controller.params.merge!(parameters)
build_request_uri(action, parameters)
@request.env["QUERY_STRING"] = query_string.kind_of?(Hash) ? query_string.to_param : query_string
@request.env["action_dispatch.request.query_parameters"] = Rack::Utils.parse_query(@request.env["QUERY_STRING"])
ActionController::Base.class_eval { include ActionController::Testing }
@controller.process_with_new_base_test(@request, @response)
@request.session.delete('flash') if @request.session['flash'].blank?
@response
end
def put_with_query(action, query_string="", parameters=nil, session=nil, flash=nil)
process_with_query(action, query_string, parameters, session, flash, 'PUT')
end
def post_with_query(action, query_string="", parameters=nil, session=nil, flash=nil)
process_with_query(action, query_string, parameters, session, flash, 'POST')
end
Есть какие-нибудь комментарии?