RSpecの ステータスコードについて
expect(response.status).to eq(:ok)
と expect(response).to have_http_status(:ok)
どっちがいいの問題と
(:ok) と (200)
どっちがいいの問題について書く
expect(response.status).to eq(:ok)と
expect(response).to have_http_status(:ok) どっちがいいのか
expect(response).to have_http_status(:ok)
を使おう。理由は下記で、have_http_status(:ok)
はステータスコードの 数値とシンボル
も対応してくれるが、
expect(response.status).to eq の場合
Failure/Error: expect(response.status).to eq(:ok) expected: :ok got: 200 (compared using ==)
expect(response.status).to eq(200) → true
expect(response).to have_http_status の場合
expect(response).to have_http_status(:ok) → true
expect(response).to have_http_status(200) → true
つまり、用意されてるmatcherを使えば、数値もシンボルも対応してくれる偉い子。
(:ok) と (200) どっちがいいのか
結論、どっちでもいいが、シンボルがいいらしい。なぜなら、数値は2XX系や3XX系で間違えやすいから。 シンボルの方がメモリ効率がいいのは全く関係ない?と思うが、またsymbolにしよう。
個人的には、毎回 422 の unprocessable_entity
なんてスペル覚えられへんわ状態だったので数値にしたかったが、シンボルで統一しようとなった。
余談
コンソールで Rack::Utils::SYMBOL_TO_STATUS_CODE
を叩くと、 ステータスコードが出るので良いよ。
まとめ
良い → expect(response).to have_http_status(:ok)
あまり良くない → expect(response.status).to eq(200)