今回のtask
・記事削除の API とテストの実装を行いましょう。
1. どこをテストするか
- 対象:DELETE /api/v1/articles/:id(記事削除)
- 範囲:Api::V1::ArticlesController の destroy(記事削除API)
2. 何を期待するか
- status:204(:no_content)
- JSONの形(配列 / オブジェクト):返さない(レスポンス本文なし)
- 理由:削除成功の合図だけ返せば十分で、余計なデータを返してAPIを重くする必要がないため
3. 前提準備
- letでテスト用ユーザー(test_user)を作成する
- letで削除対象の記事(article)を作成する(投稿者は test_user)
- 認証が未実装のため、current_user をスタブしてテスト用ユーザーを固定する
4. リクエスト送信
- HTTPメソッド:DELETE
- パス:/api/v1/articles/:id
- パラメータ:
- URLの:id を使う(Controllerでは params[:id] で受け取る)
- リクエスト本文(article: {…} みたいなデータ)は送らない
5. expect(何を確認しているか)
- expect(status)
- :no_content(204)が返ること(正常系)
- 理由:削除が成功したことをステータスで判定できるようにするため
- :not_found(404)が返ること(権限エラー / 記事が存在しない)
- 理由:current_user.articles.find の範囲内に対象記事が見つからない場合に、見つからない扱いで返す設計になっているため
- expect(DBの状態)
- Article.count が 1 減ること(by(-1))
- 理由:レスポンスだけでなく、DB上でも実際に記事が削除されていることを確認するため
6. 確認結果