О моем способе усечения таблиц в моей тестовой БД - PullRequest
1 голос
/ 02 ноября 2011

В моей Rails разработке приложений, когда я запускаю мой Rspec тест , мне нужно обрезать все таблицы в моей тестовой базе данных в after(:all).

(это для очистки всех данных в каждой таблице в тестовой базе данных)

Чтобы приблизиться к этому, я думаю сначала получить все ActiveRecord модели , которые представляют таблицы в тесте db , затем для каждой модели , I используйте метод delete_all для очистки каждой таблицы. Это что-то вроде:

ALL_ACTIVE_RECORD_MODELS.each do |model|
      model.delete_all
end

У меня есть два вопроса , которые можно задать по этому поводу:

1. Как получить всех активных моделей записи в Rails в моем коде rspec?

2. Использую ли я приемлемый способ для усечения всех таблиц в моей тестовой БД или нет? Если нет, каков альтернативный путь?

1 Ответ

3 голосов
/ 02 ноября 2011

Существует гем для выполнения именно этой задачи, который называется database_cleaner: https://github.com/bmabey/database_cleaner.

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

Имейте в виду, что это может иногда приводить к ошибкам при тестировании поведения, которое должно быть транзакционным, поскольку вы не увидите, как ваша транзакция выполнена.Вы можете исправить это, добавив self.use_transactional_fixtures = false перед любым набором тестов, в которых вы не хотите использовать транзакции.Не забудьте очистить ваши данные снова после этого, хотя.

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