Flowdock
respond_to(*args) public

Accepts a block which declares a set of requests and responses for the HttpMock to respond to in the following format:

mock.http_method(path, request_headers = {}, body = nil, status = 200, response_headers = {})

Example

@matz  = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
ActiveResource::HttpMock.respond_to do |mock|
  mock.post   "/people.xml",   {}, @matz, 201, "Location" => "/people/1.xml"
  mock.get    "/people/1.xml", {}, @matz
  mock.put    "/people/1.xml", {}, nil, 204
  mock.delete "/people/1.xml", {}, nil, 200
end

Alternatively, accepts a hash of {Request => Response} pairs allowing you to generate these the following format:

ActiveResource::Request.new(method, path, body, request_headers)
ActiveResource::Response.new(body, status, response_headers)

Example

Request.new(:#{method}, path, nil, request_headers)

@matz  = { :id => 1, :name => "Matz" }.to_xml(:root => "person")

create_matz      = ActiveResource::Request.new(:post, '/people.xml', @matz, {})
created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.xml"})
get_matz         = ActiveResource::Request.new(:get, '/people/1.xml', nil)
ok_response      = ActiveResource::Response.new("", 200, {})

pairs = {create_matz => created_response, get_matz => ok_response}

ActiveResource::HttpMock.respond_to(pairs)

Note, by default, every time you call respond_to, any previous request and response pairs stored in HttpMock will be deleted giving you a clean slate to work on.

If you want to override this behaviour, pass in false as the last argument to respond_to

Example

ActiveResource::HttpMock.respond_to do |mock|
  mock.send(:get, "/people/1", {}, "XML1")
end
ActiveResource::HttpMock.responses.length #=> 1

ActiveResource::HttpMock.respond_to(false) do |mock|
  mock.send(:get, "/people/2", {}, "XML2")
end
ActiveResource::HttpMock.responses.length #=> 2

This also works with passing in generated pairs of requests and responses, again, just pass in false as the last argument:

Example

ActiveResource::HttpMock.respond_to do |mock|
  mock.send(:get, "/people/1", {}, "XML1")
end
ActiveResource::HttpMock.responses.length #=> 1

get_matz         = ActiveResource::Request.new(:get, '/people/1.xml', nil)
ok_response      = ActiveResource::Response.new("", 200, {})

pairs = {get_matz => ok_response}

ActiveResource::HttpMock.respond_to(pairs, false)
ActiveResource::HttpMock.responses.length #=> 2
Show source
Register or log in to add new notes.