2012-03-29 9 views
10

なぜDatabaseCleanerがテストデータベースをクリーニングしていないのかわかりません。ので、私はRSpec +データベースクリーナー、正しくクリーニングされていません

DatabaseCleaner[:active_record, :connection => :test].clean 
# => nil 
ようなソリューションを得た:

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

これは正しく(テストすることになって)データベースを設定していないようです - これは私が

1.9.2p290 :007 > DatabaseCleaner.clean 

を促し得るものです

宝石は正しく設定されているようです:

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

は正しい環境でコンソールですか? (例えば、レールコンソールテスト)私はDatabaseCleanerが呼び出された環境をきれいにすることを期待しています。 –

+0

もちろんです。 _rails c test_でオープンしました。 –

+0

DatabaseCleaner [:active_record、:connection =>:test] .clean'は、nilを返します。 –

答えて

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

+0

奇妙なことに、私がこれを行うとき、私はDatabaseCleaner.startを.before(:each)と.after(:each)に入れます。これは仕様の誤りによる可能性があります。 – 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

仕様によると、あなたのお勧めは、RSpecではなくMiniTestの公式な推奨です。 https://github.com/DatabaseCleaner/database_cleaner#additional-activerecord-options-for-truncation @palominozはRSpecを参照しているようです。 – Sam

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

関連する問題