認証に Devise を使っている Rails アプリ の Request Specs の書き方をネットで調べたら、ヒットしたのは Request Specs + Capybara の情報ばかりだった。今 Rails で作っているのは Web API だから、Capybara は要らないんだよな。Request Specs だけでいいのに。そもそも、Request Specs の資料も少ないね。
StackOverflow をはじめ、海外のフォーラムやブログで調べながらトライ&エラーを繰り返した結果、Devise を使っている Rails アプリの Request Spec は次のような書き方に行き着いた。
# coding: utf-8 require "spec_helper" describe "List" do describe "GET /lists" do before do # テスト用のユーザーを作成 @user = User.create!(:email => "test@example.com", :password => "test1234") # テストデータを作成 FactoryGirl.create(:list, :user_id => @user.id, :name => "foobar") # ログイン post_via_redirect user_session_path, { "user[email]" => "test@example.com", "user[password]" => "test1234", } end after do # ログアウト destroy_via_redirect destroy_user_session_path end it "response body should include 'foobar'" do get lists_path, nil, { "HTTP_ACCEPT" => "application/json" } response.body.should include("foobar") end end end
もっと良い方法があるかもしれないけど、とりあえずこれで Request Specs 書いていく。