概要

Railsでテストを書いていると、HTMLが返ってくるリクエストの他にも、JSON形式のデータが返ってくるリクエストのテストを書きたいということがあると思います。

ここでは、JSON形式のデータが返ってくるようなテストの書き方を紹介します。

環境

  • Ruby 2.4
  • Ruby on Rails 5.1.5

方法

テストで、JSON形式のデータを返すようなリクエストを生成するには次のようにします。

def 'should get index'
  get articles_url, as: :json
end

重要なのは、getやpostなどのリクエストを生成するメソッドで、キーワード引数として、as: :jsonを指定するということです。

このようにすることで、リクエストのフォーマットがJSONとして認識されるため、JSON形式のデータが返ってきます。

ちなみに、ルーティングの設定にもよりますが、デフォルトの設定ではas: :htmlとなっているため、リクエストの結果としてHTMLが返ってきます。

間違った方法

ネットで調べてみると、次のような方法も見つかります。

def 'should get index'
  get articles_url, format: :json
end

しかし、これは古い書き方のようで動かないです。

formatではなく、asで指定するようにしましょう。

さいごに

最終的にソースコードを読んで理解しました。

同じ悩みを持つ人の参考になれば幸いです。