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.