使用 JavaScript 驱动程序运行 RSpec/Capybara 时的数据库超时
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
我尝试了很多东西(这个问题似乎最接近实际的解决方案:水豚与 :js => 真正导致测试失败),但没有任何效果,甚至摆脱了 DatabaseCleaner。还有什么我可以尝试的吗?
编辑:这是spec_helper.rb
文件,符合要求:https://gist.github.com/2855631
几乎可以肯定
config.use_transactional_fixtures = true
这是尝试在事务中运行您的示例,目的是获得干净的数据。由于您使用的是数据库清理程序,因此您已经拥有此功能,因此将其设置为 false,您应该很高兴。
https://www.relishapp.com/rspec/rspec-rails/docs/transactions
对我来说
,解决方案恰恰相反:)
我已将其设置为 false
:
config.use_transactional_fixtures = false
这一切都奏效了。有了true
,它不像以前那样工作了。
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 如何通过php页面将数据库值检索到jquery自动完成框中
- 使用javascript从数据库中添加表
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- 如何使用 Angular JS 将数据保存在数据库中
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- 在谷歌地图上绘制位置数据库
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 将地理编码结果转换为php变量以发布到mysql数据库
- 从数据库中检索字段,而不模拟它们
- javascript:将数据库中的数据插入到html5文本字段中
- 从数据库中获取数据并插入JavaScript变量
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 使用优化器在慢速连接上加载main.js时需要js超时
- 从MySQL数据库中获取输入数据需要两次页面刷新
- 在cordova android应用程序中连接数据库
- 使用 JavaScript 驱动程序运行 RSpec/Capybara 时的数据库超时
- Azure 自定义 API:执行数据库事务返回超时
- 插入数据库(node.js)时Mysql连接超时