omniauth-facebook、devise、capybara、capybara-mechanize、(おそらく VCR を使用)、および rpsec 統合テストの簡単な例を探しています...
Capybara が外部 Web サイトに接続できません。したがって、カピバラ機械化が必要になります。たぶん、VCR は物事をスピードアップすることができます。このリンクでは、テスト facebook ユーザーを取得する方法について説明しています: https://developers.facebook.com/docs/test_users/
omniauth のドキュメントで説明されているように、モックを使用すると、モデルとコントローラーのロジックをテストするのに適しています。これには、specs/helpers/omniauth.rb に次のコードを記述し、rspec 統合テストの :before で set_omniauth を呼び出す必要があります。
ただし、Facebook サーバーに対して実行される真の統合テストがあると便利です。確かに、そのような遅いテストにフラグを立てて、ガードとデフォルトの rake タスクを介して実行されないようにする必要があります。
# You can read about this gist at: http://wealsodocookies.com/posts/how-to-test-facebook-login-using-devise-omniauth-rspec-and-capybara
# which is for twitter. Below is for facebook
def set_omniauth(opts = {})
default = {:provider => :facebook,
:uuid => "1234",
:facebook => {
:email => "foobar@example.com",
:gender => "Male",
:first_name => "foo",
:last_name => "bar",
:nickname => "foo bar",
:image => 'http://graph.facebook.com/659307629/picture?type=square'
}
}
credentials = default.merge(opts)
provider = credentials[:provider]
user_hash = credentials[provider]
OmniAuth.config.test_mode = true
h = {
'provider' => provider,
'uid' => credentials[:uuid],
'info' => user_hash,
"extra" => {
"info" => user_hash
}
}
OmniAuth.config.mock_auth[provider] = CollectionUtility.deep_stringify_keys(h)
end
def set_invalid_omniauth(opts = {})
credentials = { :provider => :facebook,
:invalid => :invalid_crendentials
}.merge(opts)
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[credentials[:provider]] = credentials[:invalid]
end