rspecテストを実行すると、mongodbデータベースの古いデータが原因で多くのエラーが発生します。 AFAIKは、クリーンなデータベースでテストする方がはるかに優れています。RspecとMongoID on Rails 3でテストデータベースを消去またはリセットする
mysqlを使用すると、rake db:test:prepare
を実行してデータベースをクリーンアップすることができました。どのようにして各テストの前にデータベースをクリーンアップ/再シードできますか?
rspecテストを実行すると、mongodbデータベースの古いデータが原因で多くのエラーが発生します。 AFAIKは、クリーンなデータベースでテストする方がはるかに優れています。RspecとMongoID on Rails 3でテストデータベースを消去またはリセットする
mysqlを使用すると、rake db:test:prepare
を実行してデータベースをクリーンアップすることができました。どのようにして各テストの前にデータベースをクリーンアップ/再シードできますか?
MongoIDを使用している場合は、Database Cleanerとの切り捨て戦略を使用できます。例:
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
config.after do
DatabaseCleaner.clean
end
end
IMHO、これはあなたのデータベースを掃除する特定の目的のために宝石をインストールするよりもはるかに良くソリューションです.... 3行あなたのspec_helper.rbに行くために:
RSpec.configure do |config|
#Other config stuff goes here
# Clean/Reset Mongoid DB prior to running the tests
config.before :each do
Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
end
end
クレジット:A user named Alex posted this as a solution for a similar question.
Mongoid 3.0と他の回答はどちらも役に立ちません。私は@Batkins答えはあなたがコレクションを空にしたい場合は、代わりにその
RSpec.configure do |config|
# Clean/Reset Mongoid DB prior to running each test.
config.before(:each) do
Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/ }.each(&:drop)
end
end
のように変更されますが、この
Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/}.each {|c| c.find.remove_all}
申し訳ありません。私はあなたの答えを見ずに、上記の返答にコメントしました。 'Mongoid :: Sessions.default'は、' Mongoid.default_session'と同じくらいうまく動作します。 – Alessandro
@Alessandro - ありがとう、私はMongoidについて知りませんでした.default_session – declan
を行う、(多分あなたはインデックスや何かを持っている)、それをドロップしたくない使用しましたMongoid v2.0.2で
before(:each) do
Mongoid.purge!
end
gemfileに追加:
gem 'database_cleaner', :github => 'bmabey/database_cleaner'
実行bundle install
あなたspec_helperにこれを追加します。
config.before(:suite) do
DatabaseCleaner[:mongoid].strategy = :truncation
DatabaseCleaner[:mongoid].clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
フルクレジットは、に行く:あなたが使用している場合 http://blog.codelette.com/2013/07/07/make-rspec-clean-up-mongoid-records/
なぜあなたは単にクラス変数に関するあなたの質問を削除しましたか?それは良いものでした。私はあなたに答えました。 –
** Mongoid 3 **、あなたは意志次のようなものが必要です: 'Mongoid.default_session.collections.select {| c | c.name!〜/ system /} .each(&:drop) ' – Alessandro
これはまったくニッキーであり、実際にはまったく問題ではありませんが、あなたのソリューションは少し非効率です。選択のためにすべてのコレクションを一度繰り返し、それぞれのコレクションのサブセットを繰り返します。 これはコレクションを1回だけ繰り返します: 'Mongoid.default_session.collections.each {| coll | coll.dropを除いて/^system/.match(coll.name)} ' –