2012-03-29 4 views
10

मैं वास्तव में समझ नहीं पा रहा हूं कि डेटाबेस क्लेनर मेरे परीक्षण डेटाबेस की सफाई क्यों नहीं कर रहा है। यह मैं क्या उत्साह मिलता हैआरएसपीसी + डाटाबेस क्लीनर, सही ढंग से सफाई नहीं कर रहा है

1.9.2p290 :007 > DatabaseCleaner.clean 

-

=> [#<DatabaseCleaner::Base:0x007fa7e4dd8b58 @autodetected=true, @orm=:active_record, @strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fa7e4dc14f8 @db=:default>>] 

यह सही ढंग से डेटाबेस (होना चाहिए: परीक्षण) स्थापित करने के लिए नहीं लगता है, तो मैं

DatabaseCleaner[:active_record, :connection => :test].clean 
# => nil 
की तरह एक समाधान मिल गया

मणि सही ढंग से स्थापित किया गया प्रतीत होता है:

1.9.2p290 :007 > DatabaseCleaner[:active_record, :connection => :test] 

#<DatabaseCleaner::Base:0x007fe8fcfd4868 @orm=:active_record, @strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fe8fcfd2748 @db=:test, @connection_hash={"adapter"=>"sqlite3", "database"=>"db/test.sqlite3", "pool"=>5, "timeout"=>5000}>, @db=:test> 

यह परीक्षण डेटाबेस को सही ढंग से सेट करने लगता है, हालांकि यह अभी भी डेटाबेस को ठीक से साफ नहीं करेगा। कोई सुझाव?

बहुत बहुत धन्यवाद।

+0

सही वातावरण में अपने कंसोल है? (उदाहरण के लिए रेल कंसोल टेस्ट) मैं डेटाबेस क्लीयरर को पर्यावरण को साफ करने की अपेक्षा करता हूं जिसे इसे बुलाया जाता है। –

+0

बेशक यह है। _rails सी test_ के साथ खोला गया। –

+0

'डाटाबेस क्लीनर [: active_record,: कनेक्शन =>: परीक्षण] .clean', रिटर्न शून्य। –

उत्तर

4

यहां मेरा spec_helper.rb (थोड़ा संशोधित) है - शायद यह आपकी मदद करेगा?

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'database_cleaner' 

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    end 
    config.before(:each) do 
    DatabaseCleaner.start 
    end 
    config.after(:each) do 
    DatabaseCleaner.clean 
    end 
end 
+1

ट्राउकेशन रणनीति को प्रत्येक परीक्षण से पहले डेटाबेसCleaner.start की आवश्यकता नहीं है। – jeffreymatthias

+0

विचित्र रूप से, जब मैं ऐसा करता हूं, तो मैंने डेटाबेस Cleaner.start को .before (: प्रत्येक) और .after (: प्रत्येक) में रखा है यदि मैं इसे बाद में रखता हूं तो यह हमेशा नहीं चलता है। यह एक spec में त्रुटियों के कारण हो सकता है। – Austio

14

डेटाबेस भी साथ क्लीनर ठीक से कॉन्फ़िगर यह डेटा चारों ओर झूठ बोल रही है छोड़ने के लिए आसान है।

config.before(:suite) do 
    DatabaseCleaner.clean_with :truncation # clean DB of any leftover data 
    DatabaseCleaner.strategy = :transaction # rollback transactions between each test 
    Rails.application.load_seed # (optional) seed DB 
end 

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

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

विन्यास ऊपर & क्लीनर या तो प्रत्येक परीक्षण के पक्ष में चलाता है शुरू होता है।

आप तो अपने चश्मा में before :all का उपयोग करते हैं तो आप डेटा के आसपास झूठ बोल के साथ खत्म कर सकते हैं:

describe User do 
    # Before all is outside the before :each 
    before :all do 
    @user = User.create(:email => '[email protected]') 
    end 

    ...tests here 
end 
+0

spec के अनुसार, आपकी सिफारिश MiniTest के लिए आधिकारिक अनुशंसा है, आरएसपीईसी नहीं। https://github.com/DatabaseCleaner/database_cleaner#additional-activerecord- विकल्प-for-truncation @palominoz आरएसपीसी का जिक्र करने लगता है। – Sam

1
$ rails c test 
> require 'database_cleaner' 
> DatabaseCleaner.strategy = :truncation 
> DatabaseCleaner.clean 

https://github.com/DatabaseCleaner/database_cleaner

+0

इस उत्तर को और @mark द्वारा टिप्पणी देखें। इसे चिपकाएं जहां आप साफ करना चाहते हैं: 'DatabaseCleaner.clean_with (: छंटनी) ' – s2t2