रेल्स 4: टेस्ट डेटाबेस को रीसेट कैसे करें?


87

मैं रेल्स 4 पर हूं और मैंने देखा है कि मेरे कुछ आरएसपीईके परीक्षण विफल हो रहे हैं क्योंकि मेरे कुछ परीक्षण रिफैक्टरिंग फ़िल्टर से पहले उपयोग करते हैं (संभवतः लेनदेन के कारण)। यह पोस्ट एक समान समस्या का वर्णन करती है:

कुछ परीक्षणों के बाद क्लीयर नहीं होने वाला परीक्षण डेटाबेस

DatabaseCleaner मणि का उपयोग करने के एवज में, परीक्षण डेटाबेस को खाली करने के लिए एक रेक कमांड है? मेरा मानना rake db:test:prepareहै कि रेल 4 में पदावनत है

post :create, user: Fabricate.attributes_for(:user)

लगातार हैं क्या परीक्षण डेटाबेस को मैन्युअल रूप से साफ़ करने की आवश्यकता से बचने के लिए रीफ़ैक्टरिंग का एक वैकल्पिक तरीका है?

जवाबों:


120

एक ओवरकिल समाधान होगा:

bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test

आप यह सब एक रेक कार्य में कर सकते हैं और इसे चला सकते हैं।

यहाँ से एक और उपाय आपकी spec_helper.rbफ़ाइल को शामिल करना है

config.after :all do
  ActiveRecord::Base.subclasses.each(&:delete_all)
end

डिस्क्लेमर: मैंने इसका परीक्षण नहीं किया है और आपको एसओ पोस्ट को पढ़ना चाहिए क्योंकि यह सभी स्थितियों में काम नहीं कर सकता है।

यह कहा जा रहा है, मैं इस तरह की स्थितियों से बचने के लिए डेटाबेस क्लीनर मणि का उपयोग करने की सलाह दूंगा।


1
पहले 3 रेक db: * केवल पिछले एक के साथ प्रतिस्थापित किया जा सकता है क्योंकि यह सभी तालिकाओं को हटा देता है और उन्हें स्कीमा से बनाता है।
कोनोल

2
रेल्स 5 के लिए, blog.bigbinary.com/2015/12/28/… केApplicationRecord बजाय उपयोग करेंActiveRecord::Base
यो लुडके

3
rake db:structure:loadयदि आप स्कीमा का उपयोग कर रहे हैं, तो इसका उपयोग करें । बजाय स्कीमा.आरबी के।
आर्चोनिक

2
उपरोक्त के लिए एक RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
नीटर

98

यह हो सकता है:

bundle exec rake db:reset RAILS_ENV=test

20
मुझे लगता है कि यह भी चलता है rake db:seed ... जो एक समस्या हो सकती है या नहीं
हैरी वुड

1
यदि आप रेल 5 का उपयोग कर रहे हैं, तो कमांड अब रेक के बजाय रेल है :bundle exec rails db:reset RAILS_ENV=test
उरेल हर्नांडेज़

15

कभी-कभी आपको इस कमांड को चलाने की आवश्यकता हो सकती है (वैकल्पिक)

rails db:environment:set RAILS_ENV=test

लेकिन यह सुनिश्चित करने के लिए कि आपके परीक्षण डेटाबेस को मिटा दिया जाना चाहिए:

rails db:drop db:create db:migrate RAILS_ENV=test


2

आप संबंधित तालिकाओं से सभी प्रविष्टियों को हटाने के बाद एक फ़िल्टर जोड़ सकते हैं।


0

सिद्धांत रूप में यह ActiveRecord::Migration.maintain_test_schema!चाल चलनी चाहिए। अंदर डाल दोrails_helper.rb


0

मैंने एक साधारण रेक कार्य लिखना समाप्त कर दिया है जो सभी परीक्षण और विकास डेटाबेस को ड्राप / माइग्रेट (या ड्रॉप और माइग्रेट) करता है, जो निष्पादित कमांड पर निर्भर करता है।

इसमें उपयोगकर्ता को संकेत देने के लिए कार्यक्षमता शामिल है कि क्या वे त्रुटि होने पर जारी रखना चाहते हैं, और Open3 के पॉपेन 3 विधि का उपयोग करते हैं (जैसे कि हम स्टड, स्टडआउट और स्टडर पहुंच सकते हैं, और कोई भी विफल कमांड रेक कार्य की प्रक्रिया में परिणाम नहीं करते हैं; गर्भपात ( सिस्टम का उपयोग करते समय विपरीत ))।

उम्मीद है कि यह किसी की मदद करता है। :)

https://github.com/xtrasimplicity/rake_all_db_helper/

संपादित करें: इसे अपने शेल से मैन्युअल रूप से निष्पादित करने की आवश्यकता होगी, जब भी आप अपने डेटाबेस को साफ़ करना चाहेंगे, हालांकि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.