In Rails 5, the preferred base class for testing controllers is ActionDispatch::IntegrationTest
.
If you have an API that receives parameters as JSON request bodies, here are some helper methods to facilitate testing:
class ActionDispatch::IntegrationTest
def put_json(path, obj)
put path, params: obj.to_json, headers: { 'CONTENT_TYPE' => 'application/json' }
end
def post_json(path, obj)
post path, params: obj.to_json, headers: { 'CONTENT_TYPE' => 'application/json' }
end
end
Sample usage:
class MyControllerTest < ActionDispatch::IntegrationTest
test 'creating a foo' do
post_json foos_path, foo: { attr_1: 'bar', attr_2: 'baz' }
assert_response :created
end
end
Have you been able to get the headers to work in your test? I have been banging my head against this test. If I inspect the headers I can see them in there but if I try to inspect the keys it returns
nil
.