8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RSpecでFeatureテストを書くときにOmniauthをモック化する方法

Last updated at Posted at 2018-08-07

TL;DR

  1. spec/support/omniauth.rb でテスト用の設定とモックの生成をする
  2. テスト前にモックを環境変数に設定する

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に全部書いてある。

8
5
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
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?