TL;DR
-
spec/support/omniauth.rb
でテスト用の設定とモックの生成をする - テスト前にモックを環境変数に設定する
Omniauthのモック化
spec/support/omniauth.rb
を作成する。内容は次の通り。
spec/support/omniauth.rb
# テスト用にモックを使うための設定
# '/auth/provider'へのリクエストが、即座に'/auth/provider/callback'にリダイレクトされる
OmniAuth.config.test_mode = true
# Facebook用のモック
# '/auth/provider/callback'にリダイレクトされた時に渡されるデータを生成
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
provider: 'facebook',
uid: '12345',
info: { email: 'test1@example.com' },
credentials: { token: '1234qwer' }
)
次はspec/rails_helper.rb
内でspec/support/
以下のファイルを読み込むように設定。
spec/rails_helper.rb
# この一行を追加
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
テスト前の設定
あとはテスト前に環境変数を設定してあげるだけ。
spec/feature/sign_up.rb
before do
Rails.application.env_config["devise.mapping"] = Devise.mappings[:user] # Deviseを使っている人はこれもやる
# Facebookのモックをomniauth.authに設定
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
end
これだけ。
最後に
実はOmniauthの公式wikiに全部書いてある。