Excerpt
## Request Specs
We will use integration specs to test our APIs. Instead of using Capybara (which isn't designed for API testing), we'll use Rspec to make request specs. A request spec pushes behavior through the stack so it hits our API endpoints, a necessary part of properly testing an API. Check out Rspec's documentation on request specs for more information.
Let’s go through a few examples of request specs to get you started. We'll start by creating a new folder called spec/requests. Next, we’ll create a file for testing the GET route that returns all quotations.
```plain text
require 'rails_helper'
describe "get all quotes route", :type => :request do
let!(:quotes) { FactoryBot.create_list(:quote, 20)}
before { get '/quotes'}
it 'returns all quotes' do
expect(JSON.parse(response.body).size).to eq(20)
end
it 'returns status code 200' do
expect(response).to have_http_status(:success)
endend
```
```plain text
require 'rails_helper'
describe "post a quote
## Request Specs
We will use integration specs to test our APIs. Instead of using Capybara (which isn't designed for API testing), we'll use Rspec to make request specs. A request spec pushes behavior through the stack so it hits our API endpoints, a necessary part of properly testing an API. Check out Rspec's documentation on request specs for more information.
Let’s go through a few examples of request specs to get you started. We'll start by creating a new folder called spec/requests. Next, we’ll create a file for testing the GET route that returns all quotations.
```plain text
require 'rails_helper'
describe "get all quotes route", :type => :request do
let!(:quotes) { FactoryBot.create_list(:quote, 20)}
before { get '/quotes'}
it 'returns all quotes' do
expect(JSON.parse(response.body).size).to eq(20)
end
it 'returns status code 200' do
expect(response).to have_http_status(:success)
endend
```
```plain text
require 'rails_helper'
describe "post a quote route", :type => :request do
before do
post '/quotes', params: { :author => 'test_author', :content => 'test_content' }
end
it 'returns the author name' do
expect(JSON.parse(response.body)['author']).to eq('test_author')
end
it 'returns the quote content' do
expect(JSON.parse(response.body)['content']).to eq('test_content')
end
it 'returns a created status' do
expect(response).to have_http_status(:created)
endend
```