2011-09-29 13 views
8

मेरे पास मेरे रेल 3.1 एप्लिकेशन में निम्न spec_helper.rb फ़ाइल है। मैं परीक्षण के लिए पर्यावरण को तेजी से लोड करने के लिए स्पार्क का उपयोग कर रहा हूं। मेरे सभी परीक्षण मिश्रण में स्पार्क जोड़ने से पहले काम करते थे। स्पार्क जोड़ने के बाद, परीक्षण डेटाबेस के बीच टेस्ट डेटाबेस को ठीक से साफ़ नहीं किया जा रहा था, जिसने मेरी कुछ उम्मीदों को फेंक दिया था।स्पार्क, आरएसपीसी और डेटाबेस_कलैनर विकास डेटाबेस को नष्ट कर रहे हैं

अन्य निर्देशों के बाद, मैंने नीचे सूचीबद्ध कोड के साथ मिश्रण में डेटाबेस_क्लेनर जोड़ा; हालांकि, अब, विकास डेटाबेस साफ-सफाई के साथ-साथ परीक्षण डेटाबेस भी हो रहा है। ENV ["RAILS_ENV"] कॉल इस कॉल के दौरान परीक्षण लौटा रही है।

क्या डाटाबेसCleaner.clean_with (: truncation) के लिए केवल कॉल डेटाबेस को प्रभावित करने के लिए कॉल को स्पष्ट रूप से सीमित करने का कोई तरीका है?

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'shoulda/matchers/integrations/rspec' 
    require 'database_cleaner' 

    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

    RSpec.configure do |config| 
    config.mock_with :mocha 

    config.formatter = 'documentation' 
    config.use_transactional_fixtures = true 

    config.before(:suite) do 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 
    end 
end 

Spork.each_run do 
    FactoryGirl.reload 
end 

अपडेट: (: प्रत्येक) यहाँ मेरी database.yml फ़ाइल

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
    adapter: sqlite3 
    database: db/production.sqlite3 
    pool: 5 
    timeout: 5000 

इसके अलावा, मैं पहले में clean_with कॉल ले जाकर बुनियादी समस्या को हल काम किया है है अनुभाग, लेकिन यह धीमा परीक्षण महत्वपूर्ण रूप से चलता है।

+0

आपका 'Database.yml' क्या है? – Bohdan

+0

जानकारी को शामिल करने के लिए प्रश्न को अपडेट किया गया –

+2

मुझे भी एक ही समस्या का सामना करना पड़ रहा है, वर्तमान में मैं ऐसी चीजों को रोकने के लिए 'RAILS_ENV = test bundle exec rake spec' का उपयोग करता हूं। – subosito

उत्तर

3

क्या आपने Spork.prefork ब्लॉक से ENV["RAILS_ENV"] ||= 'test' स्थानांतरित करने का प्रयास किया है?

क्या आप सुनिश्चित हैं कि स्पार्क ने आपके डीबी को अशुद्ध कर दिया है? यदि आप आरएसपीसी के लेनदेन संबंधी फिक्स्चर का उपयोग कर रहे हैं, तो ऐसी चीज जो ऐसी चीज का कारण बन सकती है, before(:all) ब्लॉक के भीतर कारखानों का उपयोग कर रही है। आप after(:all) ब्लॉक में डेटा साफ़ कर सकते हैं और डेटाबेस क्लीयरर से छुटकारा पा सकते हैं।

बीटीडब्ल्यू, यदि आप कटाव रणनीति का उपयोग कर रहे हैं, तो DatabaseCleaner.start चलाने की कोई आवश्यकता नहीं है।

1

क्या आपके RAILS_ENV स्पष्ट रूप से "विकास" पर सेट हैं? यदि ऐसा है, तो डिफ़ॉल्ट spec_helper विकास डीबी के खिलाफ परीक्षण चलाएगा। यदि आप अंदरूनी vim से एक परीक्षण चलाते हैं, या कमांड लाइन पर rspec चलाते हैं, तो यह आपके विकास डीबी के खिलाफ परीक्षण चलाएगा।

जब मुझे डेटाबेस_क्लानेर का उपयोग करने के लिए मजबूर किया जाता है, तो मैं अपने विकास डीबी की सुरक्षा के लिए spec_helper में परीक्षण करने के लिए स्पष्ट रूप से RAILS_ENV सेट करना चाहता हूं। किसी भी समय आप लेनदेन संबंधी फिक्स्चर के अलावा कुछ और उपयोग कर रहे हैं, यह शायद एक अच्छा विचार है।

मुझे लगता है कि आप दोनों लेनदेन संबंधी फिक्स्चर और डेटाबेस_क्लानेर का उपयोग कर रहे हैं। यदि आपका डीबी लेनदेन का समर्थन करता है तो आपको डेटाबेस_क्लानेर की बिल्कुल आवश्यकता नहीं है। यदि आप मोंगो का उपयोग कर रहे हैं, या आप कैपिबरा-वेबकिट परीक्षण चला रहे हैं, तो आपको डेटाबेस_क्लानेर की आवश्यकता होगी, और लेनदेन संबंधी फिक्स्चर को अक्षम करना होगा।