Тестирование и очистка базы данных Rails - PullRequest
3 голосов
/ 21 сентября 2011

Давайте представим это:

class ModTest < ActiveSupport::TestCase
   test "something" do
     m1 = Mod.new
     # test some things
     assert m1.save
   end

   test "whatever" do
     m2 = Mod.new
     # test other things
     assert m2.save
   end
end

Перед выполнением второго тестового примера, который называется whatever, будет ли очищена база данных, или он будет содержать объект, добавленный первым тестовым примером? Можно ли это поведение контролировать / настраивать?

1 Ответ

1 голос
/ 21 сентября 2011

Не уверен на 100% в поведении по умолчанию, я использовал для этой цели гем database_cleaner .Ниже приведен соответствующий код в моем spec_helper.rb:

require 'database_cleaner'

RSpec.configure do |config|

  # Truncated for brevity

  config.before :suite do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before :each do
    DatabaseCleaner.start
  end

  config.after :each do
    DatabaseCleaner.clean
  end
end

Одно предостережение, если вы идете по этому маршруту, убедитесь, что вы удалили строку config.use_transactional_fixtures по умолчанию spec_helper.rb, если вы используете очистку транзакциистратегия - оставив значение true, вызывает транзакцию в ошибках транзакции (по крайней мере, для баз данных sqlite).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...