Очиститель базы данных стирает все таблицы, даже если используется: кроме опции - PullRequest
6 голосов
/ 08 июня 2011

У меня проблема с очистителем базы данных в проекте rails. Я использую базу данных sqlite3 в своей тестовой среде, и в ней есть несколько таблиц, содержащих справочные данные, заполненные задачей db: test: prepare, которые не нужно стирать между тестами.

У меня есть несколько сценариев с огурцами, помеченных @javascript с использованием драйвера веб-драйвера, а некоторые без этого тега.

В моем файле env.rb я настроил очиститель базы данных для использования стратегии усечения с параметром кроме:

DatabaseCleaner.strategy = :truncation, {:except => %w[ignore me]}

DatabaseCleaner.clean вызывается после каждого сценария и работает, как ожидается, в сценариях с тегами javascript.

Однако для сценариев без javascript он усекает всю базу данных, включая таблицы, перечисленные в массиве: кроме. Я также пытался позвонить DatabaseCleaner.clean_with, который тоже не работал.

Ответы [ 2 ]

8 голосов
/ 13 февраля 2015

У меня была похожая проблема с PostgreSQL и database_cleaner (1.4.0) . Этот код не работал и урезал все, несмотря на параметр : кроме :

DatabaseCleaner.clean_with(:truncation, :except => %w[countries] )

Я обнаружил, что вы должны предоставить полное имя таблицы, чтобы она работала с PostgreSQL. Следующий код работал как ожидалось:

DatabaseCleaner.clean_with(:truncation, :except => %w[public.countries] )

ОБНОВЛЕНИЕ: похоже, что это исправлено в database_cleaner версии 1.4.1 и работает там, как и ожидалось

7 голосов
/ 10 июня 2011

Я столкнулся с подобной ошибкой, за исключением того, что видел проблему при запуске моих сценариев @javascript.

После долгих поисков, поисков и причесок я наткнулся на этот пост

Я посмотрел в упомянутом там файле ловушек database_cleaner ( cucumber-rails-0.4.0 / lib / cucumber / rails / hooks / database_cleaner.rb ) и обнаружил, что он устанавливает стратегию database_cleaner до: усечение без исключений перед каждым сценарием со следующими тегами: @ no-txn, @ selenium, @ culerity, @ celerity, @ javascript.

Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
  DatabaseCleaner.strategy = :truncation
end

Я скопировал и вставил оператор before в мой файл огурца env.rb и добавил к нему оператор my: instance. Кажется, это решило проблему.

Вы уверены, что не ваши @javascript-сценарии вызывают проблему?

...