我试图在测试中重新创建
一个竞争条件,所以我可以尝试一些
解决方案.我发现在我在测试中创建的线程中,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