Очистить или сбросить тестовую базу данных с помощью Rspec и MongoID на Rails 3 - PullRequest
15 голосов
/ 05 июля 2011

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

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

Ответы [ 6 ]

30 голосов
/ 31 июля 2012

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

ИМХО, это гораздо более приятное решение, чем установка гема для конкретной цели очистки вашей базы данных .... 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

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

16 голосов
/ 05 июля 2011

Если вы используете MongoID, вы можете использовать Database Cleaner со стратегией Truncation . E.g.:

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
8 голосов
/ 21 августа 2013

В Mongoid v2.0.2

before(:each) do
    Mongoid.purge!
end

Rdoc: Mongoid.purge!

3 голосов
/ 28 марта 2014

добавить в 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/

0 голосов
/ 30 августа 2018

Если вы используете несколько клиентов MongoDB или не работаете с клиентом по умолчанию, например, вы создаете новый клиент в mongoid.yml, например: 'actions'.

необходимо указать имя подключения. например, для использования клиентом 'Actions':

config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

config.before(:each) do
  DatabaseCleaner[:mongoid, { connection: :actions }].start
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner[:mongoid, { connection: :actions }].clean
  DatabaseCleaner.clean
end
...