123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::TestResponse

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Response
Instance Chain:
self, Response, MonitorMixin, Http::Cache::Response, Http::FilterRedirect, Rack::Response::Helpers
Inherits: ActionDispatch::Response
Defined in: actionpack/lib/action_dispatch/testing/test_response.rb

Overview

Integration test methods such as Integration::RequestHelpers#get and Integration::RequestHelpers#post return objects of class TestResponse, which represent the HTTP response results of the requested controller actions.

See Response for more information on controller response objects.

Constant Summary

Http::Cache::Response - Included

DATE, DEFAULT_CACHE_CONTROL, LAST_MODIFIED, MUST_REVALIDATE, NO_CACHE, NO_STORE, PRIVATE, PUBLIC, SPECIAL_KEYS

Response - Inherited

CONTENT_TYPE, Header, NO_CONTENT_CODES, NullContentTypeHeader, SET_COOKIE

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Response - Inherited

#body

Returns the content of the response as a string.

#body=

Allows you to manually set or override the response body.

#charset

The charset of the response.

#charset=

Sets the HTTP character set.

#committed?,
#content_type

Content type of response.

#content_type=

Sets the HTTP response’s content MIME type.

#default_charset, #default_headers,
#header

Alias for Response#headers.

#headers

The headers for the response.

#request

The request that the response is responding to.

#sending?, #sending_file=, #sent?,
#status

The HTTP status code.

#status=

Sets the HTTP status code.

#stream

The underlying body, as a streamable object.

Http::Cache::Response - Included

#cache_control, #date, #date=, #date?,
#etag=

This method sets a weak ETag validator on the response so browsers and proxies may cache the response, keyed on the ETag.

#etag?, #last_modified, #last_modified=, #last_modified?, #strong_etag=,
#strong_etag?

True if an ETag is set, and it isn’t a weak validator (not preceded with W/).

#weak_etag=,
#weak_etag?

True if an ETag is set, and it’s a weak validator (preceded with W/).

Instance Method Summary

Response - Inherited

#[], #[]=,
#_cache_control

Aliasing these off because AD::Http::Cache::Response defines them.

#_cache_control=, #abort, #await_commit, #await_sent, #body_parts, #close,
#code

Returns a string to ensure compatibility with Net::HTTPResponse.

#commit!,
#cookies

Returns the response cookies, converted to a ::Hash of (name => value) pairs.

#delete_header, #each, #get_header, #handle_no_content!, #has_header?,
#media_type

Media type of response.

#message

Returns the corresponding message for the current HTTP status code:

#prepare!

Alias for Response#to_a.

#rack_response,
#redirect_url

The location header we’ll be responding with.

#reset_body!,
#response_code

The response code of the request.

#send_file

Send the file stored at path as the response body.

#sending!, #sent!, #set_header,
#status_message

Alias for Response#message.

#to_a

Turns the Response into a Rack-compatible array of the status, headers, and body.

#write

Constructor Details

This class inherits a constructor from ActionDispatch::Response

Class Method Details

.from_response(response)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/testing/test_response.rb', line 13

def self.from_response(response)
  new response.status, response.headers, response.body
end

Instance Method Details

#parsed_body

Returns a parsed body depending on the response MIME type. When a parser corresponding to the MIME type is not found, it returns the raw body.

Examples

get "/posts"
response.content_type         # => "text/html; charset=utf-8"
response.parsed_body.class    # => Nokogiri::HTML5::Document
response.parsed_body.to_html  # => "<!DOCTYPE html>\n<html>\n..."

assert_pattern { response.parsed_body.at("main") => { content: "Hello, world" } }

response.parsed_body.at("main") => {name:, content:}
assert_equal "main", name
assert_equal "Some main content", content

get "/posts.json"
response.content_type         # => "application/json; charset=utf-8"
response.parsed_body.class    # => Array
response.parsed_body          # => [{"id"=>42, "title"=>"Title"},...

assert_pattern { response.parsed_body => [{ id: 42 }] }

get "/posts/42.json"
response.content_type         # => "application/json; charset=utf-8"
response.parsed_body.class    # => ActiveSupport::HashWithIndifferentAccess
response.parsed_body          # => {"id"=>42, "title"=>"Title"}

assert_pattern { response.parsed_body => [{ title: /title/i }] }

response.parsed_body => {id:, title:}
assert_equal 42, id
assert_equal "Title", title
[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/testing/test_response.rb', line 49

def parsed_body
  @parsed_body ||= response_parser.call(body)
end

#response_parser

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/testing/test_response.rb', line 53

def response_parser
  @response_parser ||= RequestEncoder.parser(media_type)
end