##環境
Ruby 3.0.2
Rails 6.1.4.1
##APIのリクエストテスト
gemを使わずにjsonが期待通りに取れているかのテストを書くとこうなる。
describe "GET /api/v1/fruits" do
subject { get '/api/v1/fruits', headers: headers }
let!(:available_fruits1) { create(:fruit) }
let!(:available_fruits2) { create(:fruit) }
let!(:unavailable_fruits) { create(:fruit, :unavailable) }
it '旬の果物を返すこと' do
subject
json = JSON.parse(response.body)
expect(response.status).to eq 200
# 果物が3つあり、そのうち旬の果物が2つ、旬じゃないのが1つ。jsonで取れるのは果物が2つ
expect(json['fruits'].length).to eq 2
# 旬の果物の2つは含まれているか
expect(json['fruits'][0]).to include({"id"=>available_fruits1.id})
expect(json['fruits'][1]).to include({"id"=>available_fruits2.id})
# 旬でない果物は含まれていないか
expect(json['fruits'][0]).not_to include({"id"=>unavailable_fruits.id})
expect(json['fruits'][1]).not_to include({"id"=>unavailable_fruits.id})
end
end
##参考