gpt4 book ai didi

ruby-on-rails - 将 capybara 从 1.0.1 升级到 1.1.4 使 database_cleaner 打破了我的规范

转载 作者:行者123 更新时间:2023-12-04 06:41:33 24 4
gpt4 key购买 nike

我有一个旧的 Rails 应用程序升级到 3.2.11 版,它有很多使用 capybara 1.0.1 版编写并使用 selenium 驱动程序运行的请求规范。每次测试后使用 database_cleaner 使用截断策略清理数据库。

我想使用 poltergeist 而不是 selenium 并将 capybara 从 1.0.1 升级到 1.1.4 以便能够使用最新版本的 poltergeist。仅更改 capybara gem(及其依赖项)会导致运行我的规范的问题。

在每个规范之后,我一直在清理处理程序中从我的 Postgresql 数据库中收到死锁错误。我的 spec_helper 非常基本,看起来像这样:

RSpec.configure do |config|
config.mock_with :rspec

config.use_transactional_fixtures = false

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

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

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

我得到的错误是这样的:
An error occurred in an after hook
ActiveRecord::StatementInvalid: PG::Error: ERROR: deadlock detected
DETAIL: Process 41747 waits for AccessExclusiveLock on relation 17612 of database 16396; blocked by process 41752.
Process 41752 waits for RowExclusiveLock on relation 17529 of database 16396; blocked by process 41747.
HINT: See server log for query details.
: ALTER TABLE "aaa" ENABLE TRIGGER ALL;ALTER TABLE "bbbb" ENABLE TRIGGER ALL;ALTER TABLE "ccc" ENABLE TRIGGER ALL;
occurred at /xxx/.bundle/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `async_exec'

我使用 FactoryGirl 创建测试数据,但没有什么特别的 IMO。

我一直无法弄清楚 database_cleaner 创建的死锁的另一端是什么。任何解决这个问题的想法都是最受欢迎的。

任何人都知道 capybara 1.0.1 和 1.1.4 之间的任何变化已经发生变化并且可能已经开始导致这些问题?

最佳答案

我通过放置在 cucumber 中解决了这个问题

sleep 0.2

在执行一些 AJAX 内容的步骤(或在您的情况下为“规范”)的末尾。我想象发生的情况是,当 JS 驱动程序仍在等待 ajax 响应时,cucumber/rspec 调用了数据库清理器。

关于ruby-on-rails - 将 capybara 从 1.0.1 升级到 1.1.4 使 database_cleaner 打破了我的规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com