まず、omniauthwikiの統合テストのセクションを読む必要があります。基本的に、このアプローチでは、webmock gemを使用して、指定したプロバイダーからの応答をモックします。
私はこのアプローチをツイッターのモックに使用しています。私のconfig/omniauth.rbには、次のものがあります。
if (ENV["RAILS_ENV"] == 'test' || ENV["RAILS_ENV"] == 'development')
module OmniAuthHelpers
def self.add_twitter_mock(uid, name, nickname)
OmniAuth.config.add_mock(:twitter,
{ :provider => 'twitter',
:uid => uid,
:info => { :name => name, :nickname => nickname})
end
次に、私のステップ定義(キュウリの場合)には、次のものがあります。
Given /^I am logged into Twitter as the following user:$/ do |table|
add_twitter_mock(table.rows_hash[:uid],
table.rows_hash[:name],
table.rows_hash[:nickname])
end
そして私の機能では、例えば:
Scenario: Valid login through Twitter
Given I am logged into Twitter as the following user:
| name | John Doe |
| uid | 12345 |
| nickname | jdoe |
And I am on the homepage
When I click on "Sign in through Twitter"
...
この場合、「Twitter経由でサインイン」リンクは「/ auth / twitter」にリンクし、「/ auth/twitter」はモックされたTwitterAPIにリクエストを送信します。その後はすべて通常どおりに進行します(「jdoe」などへのリンクが表示されます)。