ブシトラの日記

エンジニア1年生の雑多記事

RSpecの ステータスコードについて

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を使えば、数値もシンボルも対応してくれる偉い子。

relishapp.com

(:ok) と (200) どっちがいいのか

結論、どっちでもいいが、シンボルがいいらしい。なぜなら、数値は2XX系や3XX系で間違えやすいから。 シンボルの方がメモリ効率がいいのは全く関係ない?と思うが、またsymbolにしよう。

個人的には、毎回 422 の unprocessable_entity なんてスペル覚えられへんわ状態だったので数値にしたかったが、シンボルで統一しようとなった。

シンボルとは - Qiita

余談

コンソールで Rack::Utils::SYMBOL_TO_STATUS_CODE を叩くと、 ステータスコードが出るので良いよ。

まとめ

良い → expect(response).to have_http_status(:ok)

あまり良くない → expect(response.status).to eq(200)