ruby-on-rails - 测试 Web 应用程序的 Facebook 与 Cucumber 的集成

标签 ruby-on-rails facebook cucumber capybara

我想通过执行以下场景,将 Cucumber 与 Capybara 结合使用来测试我的 Rails 应用程序的 Facebook 注册过程:

@javascript
Scenario: Connect account
  When I go to the home page
  And I press "Connect your Facebook account"
  And I fill in "test@address" for "Email"
  And I fill in "test" for "Password"
  And I press "Login"
  And I press "Allow"
  Then I should be on the dashboard page

人们如何解决集成测试基于浏览器的 Facebook 集成的问题?网络搜索只出现了几篇早于图形 API 的博客文章,它们似乎只讨论了实现一个前提条件,即设置一个代表已登录 Facebook 的用户的环境。

需要解决的一些具体问题:

如何模拟点击 <fb:login-button>元素?我想出的最好的办法(但尚未测试)是手动触发元素上的点击事件。

一旦出现 Facebook 对话框,Capybara 是否可以访问它?如何?这似乎是输入测试 Facebook 帐户的电子邮件地址和密码以及为测试帐户安装 Facebook 应用程序所必需的。

就此而言,如何管理测试帐户? http://developers.facebook.com/docs/test_users/表示可以使用图谱 API 创建和删除测试用户,但该 API 不提供对测试帐户的电子邮件地址或密码的访问权限,这似乎使它们无法用于测试此特定流程。

我确信我也忽略了其他重要问题。我很好奇其他人是如何解决这个问题的!

最佳答案

我目前正在使用 omniauth gem 来处理这种类型的身份验证。 FBML 已弃用,因此我建议改用 JS SDK 进行客户端 FB 交互。无论如何,如果您使用的是 omniauth,则可以通过在 env 文件夹中指定一些 Before 标记来相对轻松地清除响应,如下所示:

配置成功案例:

Before('@omniauth_test_success') do
  OmniAuth.config.test_mode = true

  OmniAuth.config.mock_auth[:facebook] = {
    "provider"  => "facebook",
    "uid"       => '12345',
    "user_info" => {
      "email" => "email@email.com",
      "first_name" => "John",
      "last_name"  => "Doe",
      "name"       => "John Doe"
      # any other attributes you want to stub out for testing
    }
  }
end

配置失败案例

Before('@omniauth_test_failure') do
  OmniAuth.config.test_mode = true
  [:default, :facebook, :twitter].each do |service|
    OmniAuth.config.mock_auth[service] = :invalid_credentials
    # or whatever status code you want to stub
  end
end

Cukes 功能

Scenario: A user unsuccessfully signs in with their email/password
    Given I am on the homepage
    When I follow "Login"
    And I "unsuccessfully" sign in with email and pass
    Then I should see "Failed."

@omniauth_test_success
  Scenario: A user successfully signs in with Facebook
    Given I am on the homepage
    And I follow "Login"
    When I follow "facebook"
    Then I should see "Login successful."

@omniauth_test_failure
  Scenario: A user unsuccessfully signs in with Facebook
    Given I am on the homepage
    And I follow "Login"
    When I follow "facebook"
    Then I should see "Failed."

关于ruby-on-rails - 测试 Web 应用程序的 Facebook 与 Cucumber 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331045/

相关文章:

javascript - Facebook 获取访问 token

continuous-integration - Maven 命令行参数中的 TeamCity 双引号问题

ruby-on-rails - Cucumber 不会接受 Capybara Minitest 规范断言

java - 独立运行每个 cucumber 测试

ruby-on-rails - 我如何在 Rails 迁移中创建一个接受 18 位数字的中间件?

ruby-on-rails - 通过两个关系识别模型实例

ruby-on-rails - 如何让 ffmpegthumbnailer 在 heroku 上工作

javascript - 您如何知道 Facebook 的 Javascript API 中的回调传递了什么?

android - Facebook SDK 3.0 Android - 缺少 token

ruby-on-rails - 如何使用 STI 向派生类添加列?