Очистить или reset тестовую базу данных с Rspec и MongoID на Rails 3

Когда я запускаю свои тесты rspec, многие из них терпят неудачу из-за устаревших данных в моей базе данных mongodb. AFAIK гораздо лучше проверить с чистой базой данных.

С mysql я могу запустить rake db:test:prepare для очистки базы данных. Как очистить nd/или повторно засеять базу данных перед каждым тестом?

Ответ 1

Если вы используете MongoID, вы можете использовать Очиститель баз данных с помощью стратегии Усечения. Например:.

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

Ответ 2

Ни один из других ответов не работает для меня с 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}

Ответ 3

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

Кредит: Пользователь по имени Alex опубликовал это как решение для аналогичного вопроса.

Ответ 5

добавить в gemfile:

gem 'database_cleaner', :github => 'bmabey/database_cleaner'

run 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/