class ActiveResource::HttpMock

One thing that has always been a pain with remote web services is testing. The HttpMock class makes it easy to test your Active Resource models by creating a set of mock responses to specific requests.

To test your Active Resource model, you simply call the ActiveResource::HttpMock.respond_to method with an attached block. The block declares a set of URIs with expected input, and the output each request should return. The passed in block has any number of entries in the following generalized format:

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

In order for a mock to deliver its content, the incoming request must match by the http_method, path and request_headers. If no match is found an InvalidRequestError exception will be raised showing you what request it could not find a response for and also what requests and response pairs have been recorded so you can create a new mock for that request.

Example

def setup
  @matz  = { :person => { :id => 1, :name => "Matz" } }.to_json
  ActiveResource::HttpMock.respond_to do |mock|
    mock.post   "/people.json",   {}, @matz, 201, "Location" => "/people/1.json"
    mock.get    "/people/1.json", {}, @matz
    mock.put    "/people/1.json", {}, nil, 204
    mock.delete "/people/1.json", {}, nil, 200
  end
end

def test_get_matz
  person = Person.find(1)
  assert_equal "Matz", person.name
end