我想通过执行以下场景,将 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/