0

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

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

application_controller.rb

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

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

谢谢

4

1 回答 1

0

您应该首先阅读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”的链接等)

于 2012-08-26T05:00:59.313 回答