ruby-on-rails – rspec中的多线程ActiveRecord请求

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – rspec中的多线程ActiveRecord请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在测试中重新创建一个竞争条件,所以我可以尝试一些解决方案.我发现在我在测试中创建的线程中,ActiveRecord总是返回0表示计数,nil表示查找.例如,表“foos”中有3行:
it "whatever" do
    puts Foo.count
    5.times do
      Thread.new do
        puts Foo.count
      end
    end
  end

将打印

3
0
0
0
0
0

test.log显示预期的查询,预期6次:

SELECT count(*) AS count_all FROM `active_agents`

知道这里发生了什么吗?

解决方法

我假设ActiveRecord为每个线程打开一个专用的数据库连接.由于每个RSpec示例都包含在事务中,因此其他线程可能看不到更改.

尝试禁用该规范的事务夹具.

describe "thread test" do
  self.use_transactional_fixtures = false

  it "whatever" do
    puts Foo.count
    5.times do
      Thread.new do
        puts Foo.count
      end
    end
  end
end

猜你在找的Ruby相关文章