Omniauth の Facebook での OAuth 認証を RSpec でテスト(RequestSpec/インテグレーションテスト)

スポンサーリンク

昨日のエントリー Rails + Devise + OmniAuth で Facebook/Twitter の OAuth 認証を RSpec + Capybara でインテグレーションテスト(RequestSpec) | EasyRamble の続き。Omniauth を使った Facebook による OAuth 認証をテストするコードです。

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

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

Facebook での OAuth 認証に関する仕様

OAuth 認証と通常フォームからの認証を併用する仕様にして、Facebook での OAuth 認証に関しては以下の通りとしました。

・通常フォームからのサインアップ時のEmailアドレスが、FacebookでのOAuth認証によりすでにレコードに存在している場合は、通常フォームからのサインアップを許可しない。

・FacebookでのOAuth認証の場合に取得したEmailアドレスが、通常フォームからのユーザー登録によりすでにレコードに存在している場合は、FacebookでのOAuth認証を許可しない。

詳しくは以下を参照。

Rails4 で Devise と OmniAuth を使い、通常フォームでのユーザー登録・サインインと OAuth 認証を併用する仕様を考えた | EasyRamble
Rails4 で Devise と OmniAuth で、Twitter/Facebook のOAuth認証と通常フォームでの認証を併用して実装 | EasyRamble

テストの内容

以下のテストコードの箇所で、各々仕様に則したテストを行っています。

context “valid oauth signin when facebook email doesn’t exist in users table” do

OAuth 認証に使う Facebook ユーザーのEメールアドレスが users テーブルに存在しない時は、正常に OAuth 認証させる。

context “trying to sign up when facebook email already exists” do

Facebook の OAuth 認証によりEメールアドレスが存在する時は、通常フォームからのサインアップを許可しない。

context “trying to sign in with facebook oauth when the facebook email already exists” do

通常フォームからのサインアップによりEメールアドレスが存在する時は、Facebook での OAuth 認証を許可しない。

RequestSpec のテストコード

以下書いたテストコード。

spec/requests/omniauth_pages_spec.rb

以上 All green でした。Twitter での OAuth 認証のテストも同様に書けます。Twitter の OAuth 認証ではEメールアドレスを取得できないので、Eメールアドレスが存在するかどうかのテストは書く必要がありません。valid, invalid なOAuth認証のテストを書くと良いかと思います。突っ込み歓迎です。

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

Leave Your Message!