2011-08-22 11 views
5

की सफाई नहीं कर रहा है मुझे ककड़ी & डेटाबेस लेनदेन के साथ कुछ समस्याएं हैं - विशेष रूप से, जब मैं परीक्षण सूट चलाता हूं, डेटाबेस लेनदेन बाद में साफ नहीं किया जाता है।रेल: ककड़ी डीबी

मैं स्पार्क, पोस्टग्रेस के साथ रेल 3.1 चला रहा हूं।

प्रारंभ में सुविधाओं/support/env.rb database_cleaner उपयोग करने के लिए स्थापित किया गया था, लेकिन लगातार डाटाबेस की प्रत्येक कॉल पर निम्न त्रुटि मिला:

कोई डेटाबेस निर्दिष्ट। गुम तर्क: डेटाबेस। (ArgumentError) /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:22:in postgresql_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in new_connection ' /उपयोगकर्ता/जॉन /। आरवीएम/रत्न/रूबी-1.9.2-पी 2 9 0/रत्न/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb: 302: चेकआउट में checkout_new_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:254:in ब्लॉक (2 स्तर) में ' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rbs50:in loop' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:250:in चेकआउट में ब्लॉक' /Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rbs01:in mon_synchronize' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:249:in चेकआउट ' /Users/john/.rvm/gems/ruby- 1.9.2-पी 2 9 0/रत्न/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb: 151: 012 मेंretrieve_connection ' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_specification.rb:107:in retrieve_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/active_record.rb:7:in कनेक्शन' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/active_record/transaction.rb:17:in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/base.rb:77:in साफ़ ' /उपयोगकर्ता/जॉन /। आरवीएम/रत्न/रूबी-1.9.2-पी 2 9 0/रत्न/डेटाबेस_क्लेनर-0.6.7/lib/डेटाबेस_cleaner/config.rb: 56: block in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56:in में प्रत्येक ' /Users/john/.rvm/gems/ruby-1.9.2 -p290/रत्न/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb: 56: clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/database_cleaner.rb:9:in में '

के बादमैंने नियमित लेनदेन पर वापस जाने की कोशिश की, लेकिन कोई खुशी नहीं। मैं कंसोल (ककड़ी पर्यावरण) के माध्यम से डेटाबेस तक पहुंच सकता हूं और बिना किसी समस्या के रिकॉर्ड/हटा/पुनर्प्राप्त कर सकता हूं। Config/database.yml, विशेषताएं/समर्थन/env.rb, config/वातावरण/cucumber.rb और rspec/spec_helper.rb फ़ाइलें नीचे दी गई हैं। कोई सुझाव बहुत सराहना की - यह भी मुझे कुछ समय के लिए स्टम्प्ड था की है:

config/DATABASE.yml

default: &defaults 
    adapter: postgresql 
    username: rails_dev 
    password: foobar 

development: 
    <<: *defaults 
    database: fcct_d 

test: &test 
    <<: *defaults 
    database: fcct_t 

production: 
    <<: *defaults 
    database: fcct_p 
    username: fcct 
    password: k#1*5Avb3dTa 

cucumber: 
    adapter: postgresql 
    username: rails_dev 
    password: foobar 
    database: fcct_t 

विशेषताएं/support/ENV.RB

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    require 'cucumber/rails' 
    require 'database_cleaner' 
    require 'database_cleaner/cucumber' 


    Capybara.default_selector = :css 

    ActionController::Base.allow_rescue = false 

    begin 
    DatabaseCleaner.strategy = :transaction 
    rescue NameError 
    raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." 
    end 

end 

Spork.each_run do 
    require 'factory_girl' 
    require File.join(File.dirname(__FILE__), '../../lib/existing_factory/existing_factory.rb') 
end 

config/वातावरण/खीरा आरबी

बिजनेसस्कूल कॉरपोरेट :: एप्लिकेशन.कॉन्फिगर करें # सेटिंग्स यहां निर्दिष्ट config/application.rb

# परीक्षण वातावरण अपने आवेदन की

टेस्ट स्वीट चलाने के लिए विशेष रूप से प्रयोग किया जाता है में उन लोगों से प्राथमिकता दी जाती। आपको अन्यथा इसके साथ काम करने की ज़रूरत नहीं है। याद रखें

कि # आपका परीक्षण डेटाबेस परीक्षण सूट के लिए "स्क्रैच स्पेस" है और मिटा दिया गया है और परीक्षण रनों के बीच पुनर्निर्मित किया गया है।डेटा पर भरोसा न करें!
config.cache_classes = सच
config.use_transactional_fixtures = सच

# कॉन्फ़िगर प्रदर्शन config.serve_static_assets = सच
config.static_cache_control = "सार्वजनिक, अधिकतम उम्र के लिए कैश-नियंत्रण के साथ परीक्षण के लिए स्थिर संपत्ति, सर्वर = 3600 "

# लॉग त्रुटि संदेश जब आप गलती नहीं के बराबर
config.whiny_nils पर तरीकों कॉल = सच

# पूर्ण त्रुटि रिपोर्ट दिखाएँ और अक्षम कैशिंग
config.consider_all_requests_local = सच
config.action_controller.perform_caching = false

# बजाय प्रतिपादन अपवाद टेम्पलेट्स
config.action_dispatch.show_exceptions के अपवाद उठाएँ = false परीक्षण परिवेश में

# अक्षम अनुरोध जालसाजी संरक्षण
config.action_controller.allow_forgery_protection = false

# कार्य मेलर को असली दुनिया को ईमेल वितरित न करें। # : परीक्षण वितरण विधि # एक्शनमेलर :: Base.deliveries सरणी में भेजे गए ईमेल जमा करती है।
config.action_mailer.delivery_method =: परीक्षण

# उपयोग एसक्यूएल के बजाय सक्रिय रिकॉर्ड स्कीमा डम्पर जब परीक्षण डेटाबेस का निर्माण। एसक्यूएल

# प्रिंट प्रतिवाद नोटिस: # यदि आपका स्कीमा पूरी तरह से स्कीमा डम्पर से फेंक दिया, #, जैसा कि आप की कमी या डेटाबेस विशेष स्तंभ प्रकार # config.active_record.schema_format = नहीं हो सकता है के लिए आवश्यक है stderr को
config.active_support.deprecation =: stderr अंत

कल्पना/SPEC_HELPER.RB

की आवश्यकता होती है 'rubygems' 'spork'की आवश्यकता होती है

Spork.prefork do # इस ब्लॉक में और अधिक लोड होने से आपके परीक्षण तेजी से चलाने के लिए होंगे। हालांकि, # अगर आप यहां लोड की गई पुस्तकालयों से कोई कॉन्फ़िगरेशन या कोड बदलते हैं, तो आपको #प्रभाव के लिए स्पार्क को पुनरारंभ करने की आवश्यकता होगी। # यह फ़ाइल spec/के लिए प्रतिलिपि बनाई गई है जब आप 'रेल उत्पन्न करते हैं rspec उत्पन्न करें:' ENV ["RAILS_ENV"] || = 'test' को फ़ाइल.expand_path ("../../ config/environment", फ़ाइल) की आवश्यकता होती है 'rspec/रेलों'

# आवश्यकता है कस्टम matchers और मैक्रो आदि, कल्पना/समर्थन में #/और उसकी उप-साथ गहरे लाल रंग का फ़ाइलों का समर्थन।
डिर [Rails.root.join ("spec/support/* /। आरबी")] प्रत्येक {| एफ | एफ}

आरएसपीसी की आवश्यकता है।कॉन्फ़िगर करें | config | # == नकली फ्रेमवर्क # # आप मोचा, flexmock या आर आर का उपयोग करना पसंद करते हैं, तो उपयुक्त लाइन uncomment: # # config.mock_with: मोचा # config.mock_with: flexmock # config.mock_with: rr config.mock_with: rspec

# Remove this line if you're not using ActiveRecord or 

ActiveRecord जुड़नार # config.fixture_path = "# {:: Rails.root}/कल्पना/जुड़नार"

# If you're not using ActiveRecord, or you'd prefer not to run 

आपके प्रत्येक # लेनदेन के भीतर उदाहरणों में से प्रत्येक, निम्नलिखित पंक्ति को हटाएं या सत्य के बजाय झूठी # असाइन करें। config.use_transactional_fixtures = सच अंत

अंत

Spork.each_run कर # यह कोड हर बार जब आप अपने चश्मा चलाने चलाया जाएगा।

अंत

उत्तर

1

उन सोचने वालों के लिए - यह तथ्य था कि मेरे पास & मेरी कॉन्फ़िगरेशन/डेटाबेस.इम फ़ाइल में डिफ़ॉल्ट था। डेटाबेस क्लीनर के पास 'डिफ़ॉल्ट' कॉल है, जो कॉन्फ़िगरेशन जानकारी को रोकता है।

0

क्यों आप अपने CONFIG/ENVIRONMENTS/CUCUMBER.RB फ़ाइल में config.use_transactional_fixtures = true डालने की कोशिश क्यों नहीं करते?

+0

हाय सेबेस्टियन - प्रतिक्रिया के लिए धन्यवाद। लेनदेन संबंधी फिक्स्चर को सत्य के रूप में सेट किया गया था, यह देखने के लिए कि क्या मैं त्रुटि का निदान कर सकता हूं (ऊपर सही किया गया है)। दुर्भाग्य से, एक ही समस्या है। किसी भी तरह धन्यवाद – PlankTon

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