リクエストスペックが必要な背景
最近のRailsアプリでは外部APIを持つことが増えてきています。堅牢なAPIにするためにテストもしっかりすることが求められます。
モデルのテスト(モデルスペック)とシステムテスト(システムスペック)の間を埋めるテストになります。UIから確認するほどのものではないが、モデルの単体テストでは確認しにくいものをテスト対象にします。
リクエストスペックを使うには?
フィーチャースペックのようにブラウザをシミュレートする必要はないのでCapybaraは使いません。代わりにHTTPメソッド(get,post,delete,patch等)を使います。
Capybaraは独自のDSLになるので全く書いたことがない人にとっては学習コストがかかってしまいます。あまり学習コストをかけたくないという意味でもリクエストスペックで書いてしまうというような考え方でもできそうです。
リクエストスペックのスペックファイルの生成
1 |
rails g rspec:request スペックファイル名(例:users_api) |
すると下記ファイルが生成されます。APIが複数になる(apis)というのは違和感があると思いますので、「api」に変更しても良いかもしれません。
1 |
spec/requests/users_apis_spec.rb |
コントローラスペックとの違い
リクエストスペックでできることはコントローラスペックでできることと似ています。例えばPOSTリクエストを送信するのであれば下記のようにかき分けます。コントローラスペックはcreateというアクションに依存して居ますが、リクエストスペックは具体的なルーティング名を指定しています。
コントローラスペック
1 |
post :create, params: { user: user_params } |
リクエストスペック
1 |
post users_path, params: { user: user_params } |
現在は「コントローラースペック」を使うよりも「リクエストスペック」を使うことが推奨されているようです。
getの場合
1 2 3 4 |
it "GETリクエスト" do get users_path expect(response).to have_http_status(200) end |
上の例ではpostですが、getの場合は上記のような感じでレスポンスステータスで正常性確認を行います。
この記事へのコメントはありません。