使用Capybara-webkit驱动程序时,Omniauth Test Mock不起作用

时间:2014-01-30 23:46:22

标签: javascript ruby-on-rails-4 omniauth capybara-webkit

我正在尝试使用Capybara和MiniTest以及capybara-webkit驱动程序来测试Rails 4应用程序中的页面,并使用Omniauth登录和简单的Javascript。我已按照此处所述设置了Omniauth模拟:https://github.com/intridea/omniauth/wiki/Integration-Testing,它适用于使用默认机架驱动程序的Capybara测试。

我在测试用例的开头启用了capybara-webkit驱动程序:

Capybara.current_driver = :webkit

然后,我点击我嘲笑的提供商的链接,并检查我是否通过了用户主页的身份验证:

click_on('Google')
assert_equal home_user_path(@user), current_path

断言失败了:

Expected: "/users/407557848/home"
  Actual: "/auth/google_oauth2/callback"

实际字符串是Google通过身份验证回拨的(模拟)网址。它应该被路由到我的会话控制器以设置会话,并使用机架驱动程序与其他测试用例一起使用。

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

原来这是因为webkit驱动程序在不同的线程中运行服务器。一个线程已将数据库锁定,因此另一个线程无法执行登录我所需的操作。要修复它,我停止使用事务夹具:

class TeamBuildingTest < ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
...

然后我使用database_cleaner gem来清理我的数据库。这是一个尝试采取婴儿步骤导致我更悲伤而不是更少的情况(当我试图学习水豚和Javascript时,我试图避免学习另一个宝石)。

我发现this linkdatabase_cleaner文档一起提供了帮助。