1

I wrote an endpoint that has two operations: PUT and GET. GET retrieves what was PUT, so a good way to ensure both work would be to test them in sequence.

My cURL testing tells me the service works. However, I can't get my test that does the same thing to pass!

it "accepts authenticated PUT data" do
    attributes1 = {
      user: {
        lat: '12.34',
        lng: '56.78'
      }
    }

    with_api(Location, { log_stdout: true, verbose: true }) do
      put_request({ query: { auth_token: 'abc' }, body: attributes1.to_json }) do |client|
        client.response_header.status.must_equal 201

        get_request({ query: { auth_token: 'abc' } }) do |client|
          client.response_header.status.must_equal 200
          client.response.must_match_json_expression([attributes1[:user]])
        end
      end
    end
end

Note that PUT accepts JSON in the body, and GET returns JSON. The service uses Redis as the datastore, and I use mock_redis to mock it.

test_helper.rb:

$redis = MockRedis.new

class Goliath::Server
  def load_config(file = nil)
    config['redis'] = $redis
  end
end

top of spec:

before do
  $redis.flushdb
end

The GET should retrieve what was just PUT, but instead it retrieves JSON "null".

Am I doing anything obviously wrong? Perhaps with how I am passing along body data to the request?

It would definitely help to get some better logging when my tests are running. I tried the { log_stdout: true, verbose: true } options, but this still only seems to output basic INFO logging from the Goliath server, which doesn't tell me anything about data and params.

Any help would be appreciated!

elsurudo
  • 3,579
  • 2
  • 31
  • 48
  • you can always debug your server. does the PUT request make it to the server? does it write to Redis? If you run real Redis and use redis-cli to read the Redis key that you write, what is there? also, maybe the `mockredis` is not working as expected? things like that. – akonsu Jun 25 '13 at 13:49

0 Answers0