您应该首先阅读omniauth wiki 的集成测试部分。基本上,该方法使用webmock gem 来模拟来自您指定的任何提供者的响应。
我使用这种方法来模拟 twitter。在我的 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”,然后它会向模拟的 Twitter API 发出请求。之后的一切都照常进行(然后我应该看到“jdoe”的链接等)