我们有一个庞大的测试套件(完整构建通常需要运行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
请问有人之前遇到过这样的问题吗?
提前感谢您的帮助!
after(:each)
钩子中设置调试器,并拍摄屏幕截图或检查已打开的请求,以了解真正的原因。 - dubadub