omn​​iauth-facebook,集成测试,rspec,capybara - 从哪里开始?

时间:2012-08-26 04:18:50

标签: ruby-on-rails facebook ruby-on-rails-3 rspec

我为测试api的应用程序做了一些非常简单的集成测试。我想为我们的facebook登录添加集成测试。我很困惑如何做到这一点。似乎有两种选择。一种是尝试拨打facebook并实际登录。我不清楚我在Firefox中的facebook会话是否会被使用。另一个选择可能是模拟facebook调用其他东西,只需手动设置会话值。

我当前的用户目前通过以下方式设置:

application_controller.rb

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

这些技巧中的任何一种都可以吗?这个比那个好吗?

THX

1 个答案:

答案 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"等等。)