2014-01-30 56 views
2

我试图用MiniTest和capybara-webkit驱动程序使用Capybara从Rails 4应用程序测试页面,使用Omniauth登录和简单的Javascript对其进行测试。我已经设置了如下所述的Omniauth模拟:https://github.com/intridea/omniauth/wiki/Integration-Testing,并且它对默认机架驱动程序的Capybara测试正常工作。Omniauth Test Mock在使用Capybara-webkit驱动程序时不起作用

我能够在测试用例开始的水豚,WebKit的驱动程序:

Capybara.current_driver = :webkit 

然后,我点击了链接,我嘲笑的提供商,并检查我通过认证得到了用户的主页:

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

断言失败:

Expected: "https://stackoverflow.com/users/407557848/home" 
    Actual: "/auth/google_oauth2/callback" 

的ACTU al字符串是谷歌回叫的(模拟)URL,带有认证。它应该被路由到我的会话控制器来设置会话,并使用机架驱动程序来处理其他测试案例。

任何想法我做错了什么?

回答

1

原来这是因为webkit驱动程序在不同的线程中运行服务器。 。一个线程已经数据库锁定,所以其他线程不能做它需要做的登录我要解决它,我停止使用事务灯具:

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

然后我用了database_cleaner宝石清洁出我的数据库。这是一个试图采取婴儿步骤的案例,导致我更多的悲伤,而不是更少(当我试图学习Capybara和Javascript时,我试图避免学习另一个宝石。

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

相关问题