[英]Database timeout when running RSpec/Capybara with javascript driver
我正在尝试使用JavaScript驱动程序(带有Webkit或Poltergeist)与Capybara一起工作的RSpec示例,但是更新表时数据库存在锁定问题。 这是有问题的示例的一部分:
scenario 'by changing the contract attributes', js: true do
login_as @admin, scope: :user
contract = Contract.create(number: '123',
start_at: Date.today,
end_at: Date.today + 1.month)
visit "/contracts/#{contract.id}/edit"
我正在使用Devise和Warden::Test::Helpers
登录。
运行RSpec需要一段时间,而我得到的一切:
Failure/Error: visit "/contracts/#{contract.id}/edit"
Capybara::Driver::Webkit::WebkitInvalidResponseError:
Unable to load URL: http://127.0.0.1:46520/contracts/1/edit
日志显示存在数据库锁定问题:
Started GET "/contracts/1/edit" for 127.0.0.1 at 2012-06-01 12:10:26 -0400
(0.2ms) BEGIN
(51083.3ms) UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1
Mysql2::Error: Lock wait timeout exceeded; try restarting transaction: UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1
(0.8ms) ROLLBACK
我尝试了很多事情(这个问题似乎最接近实际的解决方案: Capybara的:js => true导致测试失败 ),但没有任何效果,甚至摆脱了DatabaseCleaner。 还有什么我可以尝试的吗?
编辑 :这是请求的spec_helper.rb
文件: https : spec_helper.rb
几乎可以肯定
config.use_transactional_fixtures = true
为了获得干净的数据,它试图在事务内运行您的示例。 由于您正在使用数据库清理程序,因此您已经拥有此功能,因此请将其设置为false即可。
https://www.relishapp.com/rspec/rspec-rails/docs/transactions
对我来说,解决方案是相反的:)
我将其设置为false
:
config.use_transactional_fixtures = false
而且一切正常。 true
它没有像以前那样工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.