2010-05-15 36 views
5

Tôi đang cố gắng tạo lại một điều kiện chủng tộc trong một thử nghiệm, vì vậy tôi có thể thử một số giải pháp. Tôi thấy rằng trong các chủ đề tôi tạo ra trong bài kiểm tra của tôi, ActiveRecord luôn trả về 0 cho số và không tìm kiếm. Ví dụ, với 3 hàng trong bảng "foos":Yêu cầu ActiveRecord đa luồng trong rspec

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

sẽ in

3 
0 
0 
0 
0 
0 

test.log cho thấy truy vấn dự kiến, dự kiến ​​6 lần:

SELECT count(*) AS count_all FROM `active_agents` 

Bất kỳ ý tưởng những gì đang xảy ra ở đây?

Trả lời

12

Tôi giả sử ActiveRecord mở một kết nối cơ sở dữ liệu chuyên dụng cho từng chuỗi. Vì mỗi ví dụ RSpec được bao bọc bên trong một giao dịch, các luồng khác có thể không thấy các thay đổi.

Hãy thử tắt đồ đạc giao dịch cho thông số đó.

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 
+0

Tôi đã gặp vấn đề rất giống với mô tả và giải pháp @ henning-koch đã giải quyết nó cho tôi. Tôi đã thêm mã vào giải pháp của mình ở trên (cần phải được chấp nhận bởi người khác). –

+0

Mẹo rất hay! –

Các vấn đề liên quan