我为测试api的应用程序做了一些非常简单的集成测试。我想为我们的facebook登录添加集成测试。我很困惑如何做到这一点。似乎有两种选择。一种是尝试拨打facebook并实际登录。我不清楚我在Firefox中的facebook会话是否会被使用。另一个选择可能是模拟facebook调用其他东西,只需手动设置会话值。
我当前的用户目前通过以下方式设置:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
这些技巧中的任何一种都可以吗?这个比那个好吗?
THX
答案 0 :(得分:0)
您应首先阅读omniauth wiki的Integration Testing部分。基本上,该方法使用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'的链接,然后向被嘲笑的Twitter API发出请求。之后的所有事情都会像平时那样进行(然后我会看到一个链接到" jdoe"等等。)