Given my API consumers are required to send a customer HTTP header like this:
# curl -H \'X-SomeHeader: 123\' http://127.0.0.1:3000/api/api_call.json
well, maybe too late for people but just to be lined up:
it 'should get profile when authorized' do
user = FactoryGirl.create :user
request.headers[EMAIL_TOKEN] = user.email
request.headers[AUTH_TOKEN] = user.authentication_token
get :profile
response.should be success
end
just call request.headers with appropriate settings.
You can define it in get
directly.
get :api_call, nil, {'HTTP_FOO'=>'BAR'}
I just verified it works in console.
RSpec request specs changed in Rails 5 so that custom headers
and params
must now be defined using key-value hash arguments. E.g.:
Before in Rails 4:
it "creates a Widget and redirects to the Widget's page" do
headers = { "CONTENT_TYPE" => "application/json" }
post "/widgets", '{ "widget": { "name":"My Widget" } }', headers
expect(response).to redirect_to(assigns(:widget))
end
Now for Rails 5:
it "creates a Widget and redirects to the Widget's page" do
headers = { "CONTENT_TYPE" => "application/json" }
post "/widgets", :params => '{ "widget": { "name":"My Widget" } }', :headers => headers
expect(response).to redirect_to(assigns(:widget))
end