Rails тестирование через грабли: не трогайте мою базу данных разработчиков - PullRequest
6 голосов
/ 17 сентября 2011

Я хочу, чтобы 'rake test: units' успешно выполнял тесты на подготовленной тестовой базе данных, пока моя база данных разработки не работает. В настоящее время rails пытается собрать тестовую базу данных из базы данных разработки. Возможно ли это?

Я нахожусь в ситуации, когда мои базы данных prod / dev отключены от хоста, но для модульных тестов я использую sqlite в базе данных памяти.

РЕДАКТИРОВАТЬ для моих точных действий: Примечание. Я использую Rails 2.3

Моя тестовая база данных настроена так в config / database.yml:

test:
  adapter: sqlite3
  database: 'sqlite3_unittest_file.dat'
  pool: 5
  timeout: 5000

Когда я запускаю rake db:test:load, тестовая база данных (которая является просто файлом) генерируется правильно в каталоге rails-root. И когда я запускаю rake test:units, все работает.

Теперь, если я отредактирую database.yml, чтобы установить для своей базы данных DEV имя пользователя что-то неправильное (например, 'sdlkfj'), rake test:units мгновенно завершится неудачей, выдав жалобу:

Access denied for user 'sdlkfj'@'myhostnsmae' (using password: YES)

Когда я запускаю эту сборку «по-настоящему», я запускаю ее в системе, где сборкам не разрешается разговаривать в автономном режиме во время процесса сборки. Следовательно, эта попытка поговорить с базой данных разработчика и мгновенное карканье убивает меня и кажется неверной.

Ответы [ 2 ]

7 голосов
/ 17 сентября 2011

Попробуйте запустить задачу rake с явной средой:

rake test:units RAILS_ENV=test

Если вы не указали среду, по моему опыту предполагается, что development.И хотя в тестовую базу данных все еще вставляются данные о приборах, на материал из среды development по какой-то причине все еще ссылаются.

4 голосов
/ 17 сентября 2011

Причина, по которой это не удается, заключается в том, что 'rake test: units' пытается сначала убедиться, что тестовая база данных настроена правильно.Для этого он вызывает 'rake db: test: prepare', который копирует текущую схему из базы данных dev (я думаю, чтобы убедиться, что все миграции выполнялись до запуска тестов).

Я предполагаюВы можете обойти это несколькими способами, один из них - переопределить задачу rake "db: test: prepare", которая была предложена в этом посте в стеке overflow.

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