rspec

2010-05-15 19 views
5

में मल्टीथ्रेड किए गए ActiveRecord अनुरोध मैं एक परीक्षण में दौड़ की स्थिति को फिर से बनाने की कोशिश कर रहा हूं, इसलिए मैं कुछ समाधानों को आजमा सकता हूं। मुझे लगता है कि मैंने अपने परीक्षण में बनाए गए धागे में, ActiveRecord हमेशा खोजों के लिए 0 और शून्य के लिए 0 देता है। उदाहरण के लिए, तालिका में 3 पंक्तियों "कम महत्वपूर्ण चीज़ें" के साथ:rspec

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` 

कोई विचार क्या हो रहा है?

उत्तर

12

मुझे लगता है कि ActiveRecord प्रत्येक थ्रेड के लिए एक समर्पित डेटाबेस कनेक्शन खोलता है। चूंकि प्रत्येक आरएसपीईसी उदाहरण लेनदेन के अंदर लपेटा जाता है, इसलिए अन्य धागे में परिवर्तन दिखाई नहीं दे सकते हैं।

उस स्पेक के लिए लेनदेन संबंधी फिक्स्चर को अक्षम करने का प्रयास करें।

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

मुझे वही समस्या थी जिसमें जैम वर्णन कर रहा था और @ हेनिंग-कोच के समाधान ने इसे मेरे लिए हल किया। मैंने उपरोक्त अपने समाधान में कोड जोड़ा (हालांकि किसी और द्वारा स्वीकार किया जाना चाहिए)। –

+0

बहुत अच्छी चाल! –

 संबंधित मुद्दे