我正在尝试使用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通过身份验证回拨的(模拟)网址。它应该被路由到我的会话控制器以设置会话,并使用机架驱动程序与其他测试用例一起使用。
知道我做错了吗?
答案 0 :(得分:1)
原来这是因为webkit驱动程序在不同的线程中运行服务器。一个线程已将数据库锁定,因此另一个线程无法执行登录我所需的操作。要修复它,我停止使用事务夹具:
class TeamBuildingTest < ActionDispatch::IntegrationTest
self.use_transactional_fixtures = false
...
然后我使用database_cleaner gem来清理我的数据库。这是一个尝试采取婴儿步骤导致我更悲伤而不是更少的情况(当我试图学习水豚和Javascript时,我试图避免学习另一个宝石)。
我发现this link与database_cleaner
文档一起提供了帮助。