2014-09-16 6 views
57

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

rails test database not clearing after some runs

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

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

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

उत्तर

1

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

85

एक overkill समाधान होगा:

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 

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

here से एक अन्य समाधान अपने spec_helper.rb फ़ाइल निम्न

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

अस्वीकरण शामिल करने के लिए है: मैं इस परीक्षण नहीं किया है और आप SO post पढ़ के रूप में यह सभी परिस्थितियों में काम नहीं कर सकता चाहिए।

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

+1

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

+0

आप 'बंडल निष्पादन रेक डीबी गायब हैं: रेलवे 5 के लिए 'स्कीमा: लोड' चरण – Aleks

+0

से पहले RAILS_ENV = test' बनाएं,' ActiveRecord :: Base' के बजाय 'ApplicationRecord' का उपयोग करें https://blog.bigbinary.com/2015/12/28/application-record-in-rails-5.html –

60

यह हो सकता है:

bundle exec rake db:reset RAILS_ENV=test 
+10

मुझे लगता है कि 'रेक डीबी: बीज' भी चलाता है ... जो समस्या हो सकती है या नहीं भी हो सकती है –

0

सिद्धांत रूप में इस ActiveRecord::Migration.maintain_test_schema! चाल करना चाहिए। इसे rails_helper.rb

0

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

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

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

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

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

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