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)
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)
我已经成功地使用以下代码在 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)
| 归档时间: |
|
| 查看次数: |
5131 次 |
| 最近记录: |