RSpecでAjaxリクエストに対しRequest Spec(結合テスト)を行う

スポンサーリンク

Request Spec で Ajax リクエストに対するテストを行う方法です。ちょっとはまりました。Controller Spec(spec/controllers)での Ajax リクエストに対するテストの情報はたくさん見つかりましたが、Controller Spec(コントローラーテスト)での Devise ユーザーのログインが上手くできず挫折..。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails-4.0.1
devise-3.2.2
rspec-rails-2.14.0
capybara-2.2.0

Controller Spec の場合 xhr メソッドの第二引数はアクション名を書きますが、Request Spec(結合テスト)の場合 xhr メソッドの第二引数には HTTP メソッド名(post や delete)に対応するパスを指定します。

Request Spec で Ajax リクエストをテストするコード

spec/requests/comment_pages_spec.rb

Ajax の場合、expect(response).to be_success より、response.code.should == “200” のほうが、テスト失敗時にHTTPステータスコードが把握できるので分かりやすい。また、post, delete のリクエストで、Comment テーブルのレコード数が増減しているかをチェックしています。

FactoryGirl と login メソッドについて

省略していますが、FactoryGirl で User, Comment モデルのオブジェクトを生成させるファイルは以下のような感じ。

spec/factories.rb

Devise 使用時に、Request Spec でユーザーをログインさせる login メソッドについては以下を参照。

Rails + RSpec + Capybara で Devise での認証ログインが必要なインテグレーションテスト(RequestSpec)を行う | EasyRamble

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク

Leave Your Message!