2012-03-29 42 views
10

我真的不明白爲什麼DatabaseCleaner不清洗我的測試數據庫。這是我所得到的提示RSpec的+數據庫清理,清洗不正確

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

是您在正確的環境控制檯? (例如rails控制檯測試)我期望DatabaseCleaner清理它所調用的環境。當然是 – 2012-03-29 14:51:16

+0

。用_rails c test_打開。 – 2012-03-29 15:06:32

+0

促使'DatabaseCleaner [:active_record,:連接=>:測試] .clean',返回零。 – 2012-03-29 15:07:11

回答

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

截斷策略並不在每次測試之前需要DatabaseCleaner.start。 – jeffreymatthias 2013-10-29 22:31:21

+0

奇怪的是,我這樣做,當我把DatabaseCleaner.start的。前(:每個)和。經(:每個)如果我只是把它放在它並不總是運行後。這可能是由於規範中的錯誤。 – Austio 2014-02-26 05:19:44

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

根據規範,你的推薦是MiniTest的官方建議,而不是RSpec。 https://github.com/DatabaseCleaner/database_cleaner#additional-activerecord-options-for-truncation @palominoz似乎是指RSpec。 – Sam 2015-03-02 15:15:37

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

https://github.com/DatabaseCleaner/database_cleaner

+0

看到這個答案和@mark評論。堅持這個你想要清理的地方:'DatabaseCleaner.clean_with(:truncation)' – s2t2 2017-10-09 02:25:53