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

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

スポンサーリンク

— 環境 —
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 もおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!