Rspec Capybara套件超时

3

我们有一个庞大的测试套件(完整构建通常需要运行15分钟),两天前开始超时,自那以后我们就无法运行完整的构建。我在rails_helper中添加了一个配置,如果规格运行时间过长,则强制失败:

config.around(:each) do |example|
    Timeout::timeout(10) {
      example.run
    }
end

昨天我们使用这个配置进行了完整的构建,但有超过60个规格失败了!这些规格在隔离的情况下运行并通过。

我们的DatabaseCleaner设置如下:

config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
end

config.before(:each) do
  DatabaseCleaner.strategy = :transaction
end


config.before(:each, js: true) do
  DatabaseCleaner.strategy = :truncation
end

config.before(:each) do
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner.clean
end

config.use_transactional_fixtures = false

在一些不太稳定的规格中,我们会加入几个 sleep。
很不幸,当我运行构建并监视测试日志时,没有任何有趣的输出可以帮助我进行调试。
我认为最后值得注意的信息是我们的 gemfile 设置。这里是我们的测试组 gem:
group :test do
  gem 'capybara-screenshot', '1.0.10'
  gem 'capybara', '2.4.4'
  gem 'rspec-rails', '3.2.0'
  gem 'capybara-webkit', '1.3.1'
  gem 'launchy', '2.4.3'
  gem 'selenium-webdriver', '2.46.2'
  gem 'database_cleaner', '1.3.0'
end

请问有人之前遇到过这样的问题吗?
提前感谢您的帮助!

有时实际页面加载可能需要超过10秒钟。我建议您在after(:each)钩子中设置调试器,并拍摄屏幕截图或检查已打开的请求,以了解真正的原因。 - dubadub
两天前发生了什么变化?你的selenium-webdriver已经过时几个月了,如果要测试新版本的浏览器,可能需要更新它。 - Thomas Walpole
我添加了一个 after(:each) 的截图,但结果并不明显。它只显示了一个渲染的页面而已。 @TomWalpole 我更新了我们的 gems,但仍然出现超时的情况。我还检查了10天前的提交,当时规范肯定是运行正常的,但现在却一直卡住。 :( - Ellie Morris
@EllieMorris - 如果10天前的提交现在不起作用,那么必须是测试设置中的某些更改导致的,例如浏览器更新或操作系统更新(您正在测试哪个浏览器?) - Thomas Walpole
我们遇到了同样的问题,奇怪的是它也会在完全不同的CI服务器上出现故障。我们还可以构建两个月前的提交。 - Jankeesvw
超时问题也是在创建此stackoverflow问题的同一天开始出现的,这是巧合吗? - Jankeesvw
1个回答

1

嗯,结果是更新了所有测试 gem 并将以下代码添加到我们的 rails_helper 即可解决问题:

Capybara::Webkit.configure do |config| config.block_unknown_urls end

不幸的是,我不清楚为什么这样就能解决问题,但是构建过程在两天后第一次完成。


我们遇到了同样的问题,不幸的是添加 block_unknown_urls 对我们没有帮助。 - Jankeesvw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接