база данных рельсов не будет стираться - PullRequest
4 голосов
/ 02 февраля 2011

Я использую rails 3.0.3 и использую rspec-rails 2.4.1 с базой данных postgresql. Всякий раз, когда я запускаю свои тесты RSpec, данные остаются в конце. Кто-нибудь знает, как получить рельсы или rspec для очистки данных тестовой среды между каждым использованием?

Скажите, пожалуйста, есть ли какая-либо дополнительная информация, которая могла бы облегчить ответ на мой вопрос.

Спасибо!
Тристан

Ответы [ 4 ]

10 голосов
/ 02 февраля 2011

Установите гем database_cleaner и добавьте его в свой spec_helper.rb.

Spec::Runner.configure do |config|

  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
5 голосов
/ 02 февраля 2011

Использование примеров транзакций для отката данных после каждого запуска теста

RSpec.configure do |config|
  config.use_transactional_examples = true
end
1 голос
/ 23 апреля 2013

Вам не нужен дополнительный драгоценный камень для очистки тестовой базы данных между запусками.В вашем файле spec_helper.rb настройте rspec следующим образом:

RSpec.configure do |c|
  c.around(:each) do |example|
    ActiveRecord::Base.connection.transaction do
      example.run
      raise ActiveRecord::Rollback
    end
  end
end
0 голосов
/ 28 марта 2013

Другая возможность, которую я только что использовал, - это неправильный блок before.

Я случайно установил блок before как all вместо each:

before :all do
  user = FactoryGirl.create(:user)
  sign_in user
end

Это заставило user задерживаться в базе данных на весь прогон rspec, что вызывало коллизии при проверке.

Вместо этого before должно быть eachчтобы все было чистым в ходе rspec запуска:

before :each do
  user = FactoryGirl.create(:user)
  sign_in user
end

Если вы допустили эту ошибку, вам, вероятно, потребуется вручную очистить тестовую базу данных, прежде чем все вернется в нормальное состояние.Самый простой способ сделать это, вероятно, обрезать каждую из таблиц (кроме schema_migrations).

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