测试Web应用程序与Cucumber的Facebook集成

Bri*_*ley 9 facebook ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

人们如何处理基于浏览器的Facebook集成的集成测试问题?网络搜索只出现了几个早于图API的博客帖子,他们似乎只讨论实现一个前提条件,即建立一个代表已经登录到Facebook的用户的环境.

要解决的一些具体问题:

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

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

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

我相信我也会忽略其他重要问题.我很好奇其他人是如何攻击这个问题的!

小智 13

我目前正在使用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
Run Code Online (Sandbox Code Playgroud)

配置失败案例

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
Run Code Online (Sandbox Code Playgroud)

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."
Run Code Online (Sandbox Code Playgroud)


tva*_*hon 2

我已经成功地使用以下代码在 rspec 接受规范中实现了这一点:

https://gist.github.com/1084767

这使用 mogli 来创建和销毁测试用户,并使用 capybara 来编排浏览器测试。我相信您可以通过删除shared_context块并使用Cucumber之前/之后挂钩来使其与Cucumber一起使用,例如:

Before '@fb_test_user' do
  @fb_user = create_test_user(installed: false)
end

After '@fb_test_user' do
  @fb_user.destroy
end

World(FacebookIntegrationHelpers) 
Run Code Online (Sandbox Code Playgroud)