微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐