LoginSignup
41
41

More than 5 years have passed since last update.

Capybara + FactoryGirlでの、TwitterのOAuth(Omniauth)認証を使ったRailsアプリのテストの書き方サンプル

Last updated at Posted at 2012-10-03

追記 2012/09/22

モック部分、シンボルだとうまくいかないので文字列で"uid"という風に書かないといけません。修正しました。

初めてTDDをやってるのですけど、OAuth認証のテストのやりかたを調べるのに時間がかかったので、後のためにここに書いておきます。

auth_spec.rb
#coding: utf-8
require 'spec_helper'
describe "A logged in user" do
  before do
    OmniAuth.config.test_mode = true
    user = FactoryGirl.create(:user)
    OmniAuth.config.mock_auth[:twitter] = {
      "uid" => "11111",
      "provider" => "twitter",
      "info" => {
        "description" => "こんにちはこんにちは! かとりょーです!"
      }
    }
      visit "/auth/twitter"
  end

  after do
    OmniAuth.config.test_mode = false
  end
  describe "in items page" do
    it "should add an item by the user" do
      visit items_path
      click_link "宣伝一覧"
      click_link "宣伝を登録する"
      fill_in "item_body", :with => "アナテマ・フィジクスをぜひプレイしてみて!"
      click_button "登録"
      click_link "宣伝一覧"
      page.should have_content("アナテマ・フィジクスをぜひプレイしてみて!")
      page.should have_content("Edit")
      click_link "ユーザー一覧"
      page.should have_content("denki")
    end
  end
end

です。

OmniAuth.config.test_mode = true

OmniAuth.config.mock_auth[:twitter] = {:uidなど}

がポイント。
モックをauth_spec.rbのほうで作ってしまって、フィクスチャで作ったユーザーには/auth/twitterにアクセスしてもらうことで、OAuth認証が完了します。OAuthのgemはomniauth-twitterを使ってます。

FactoryGirlで作るフィクスチャは、以下のようにしました。

factories.rb
#coding:utf-8
FactoryGirl.define do
  factory :item do
    body "アナテマ・フィジクスを見てね!" 
    user
  end
  factory :user do
    sequence(:name_twitter) { |n| "denki#{n}" }
    sequence(:uid_twitter) { |n| n + 1000 }
    point 5
  end

  factory :retweet do
    item
    user
  end
end

参考

https://github.com/intridea/omniauth/wiki/Integration-Testing
OmniauthのGithubのwikiには、モックは

:provider => 'twitter',

という風に書くように指定されているが、実際はこれだとうまくいかなかったりするので、Stackoverflowの
http://stackoverflow.com/questions/9730886/rails-rspec-and-omniauth-integration-testing
で教えられるように、文字列で

"provider" => "twitter",

と書くとよい。

41
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
41