ruby-on-rails – rspec中的多线程ActiveRecord请求
发布时间:2020-12-16 21:50:53 所属栏目:百科 来源:网络整理
导读:我试图在测试中重新创建一个竞争条件,所以我可以尝试一些解决方案.我发现在我在测试中创建的线程中,ActiveRecord总是返回0表示计数,nil表示查找.例如,表“foos”中有3行: it "whatever" do puts Foo.count 5.times do Thread.new do puts Foo.count end end
我试图在测试中重新创建一个竞争条件,所以我可以尝试一些解决方案.我发现在我在测试中创建的线程中,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |