1. どこをテストするか
- 対象:GET /api/v1/articles(記事一覧)
- 前提:ログイン不要
2. 何を期待するか
- status:200
- JSONの形(配列 / オブジェクト):配列
コードの意図(何を確認しているか)
describe "GET /index" do
it "記事一覧を取得できる" do
# テストデータを作成
article = create(:article)
# APIリクエストを送信
get "/api/v1/articles"
# レスポンスを確認
expect(response).to have_http_status(:ok)
expect(json_response).to be_an(Array)
expect(json_response.first["title"]).to eq(article.title)
expect(json_response.first["updated_at"]).to be_present
end
end
(期待していること)
- describe:このテストは「記事一覧(GET)について」を明示している見出し
- get …:/api/v1/articles にGETリクエストを送っている
- expect …(status):リクエストが成功(200)で返ることを確認している
- 成功していない状態だと、返ってくる内容をチェックしても信憑性がない
- expect …(Array):レスポンス本文が「一覧として配列の形」で返ることを確認している
- 一覧は0件/複数件になりうるので、配列で返すと扱いやすい(見やすい)から
- expect …(title):配列の先頭の title が、作成した記事の title と一致することを確認している(先頭=その記事の前提)
- 一覧に「作成した記事が含まれている」ことを確認したいから
- expect …(updated_at):配列の先頭に updated_at が入っていること(空じゃないこと)を確認している
4. 確認結果
bundle exec rspec spec/requests/api/v1/articles_request_spec.rb:5
Run options: include {:locations=>{"./spec/requests/api/v1/articles_request_spec.rb"=>[5]}}
Api::V1::Articles
GET /index
記事一覧を取得できる
Finished in 0.58798 seconds (files took 2.23 seconds to load)
1 example, 0 failures
- このテストで守っていること:記事一覧の「成功(200)」「返り方(配列)」「最低限の項目(title/updated_at)」が崩れないこと
コードの修正