импортирование данных прибора из mysql - PullRequest
1 голос
/ 16 октября 2010

В любом случае можно ли импортировать данные, используя mysqldump, а не фикстуры во время теста (тест rake: профиль в данном случае).

Мне не удалось экспортировать данные mysql в формате yml (что работает нормально)и импортирование его в rails (не работает, задача rake жалуется на форматирование файла yml, целостность которого кажется нетронутой).

В какие еще дни можно экспортировать / импортировать данные с или без фиксаторов?

1 Ответ

0 голосов
/ 09 ноября 2011

Mysqldump - это программа командной строки, поэтому вам придется написать грабли, чтобы очистить вашу БД. Я согласен с Майком Б. Существует общий совет, такой как «Толстая модель, тощий контроллер», который гласит «Фабрики, а не приспособления» из Railscast , охватывающий эту тему. Преимущество фабрик в том, что они могут откатывать БД между каждым тестом, если вы того пожелаете. Кроме того, у осветителей есть недостаток, заключающийся в том, что они не очень легко представляют отношения: вам нужно создавать и поддерживать первичные / внешние ключи вручную. Это какая-то боль.

Если бы мне действительно пришлось придерживаться приборов, я бы не импортировал данные для тестирования. Тестирование вашей базы данных выходит за рамки вашего приложения. Если ваше приложение действительно зависит от наличия данных, поместите его в seed.rb. Но данные приложения не должны быть проверены. Например, мне действительно все равно, что находится в таблице Users, поле first_name. Если я сделал, я пишу тестер данных?

Кроме того, я надеюсь, что вы не сбрасываете производственные данные в тестовую базу данных, а затем тестируете их. Это чрезмерно.

Если вы все еще хотите использовать mysqldump и фикстуры, напишите грабли или скрипт для выполнения следующих действий:

  • Во-первых, используйте mysqldump для вывода данных, которые вы хотите использовать.
  • Обрежьте операторы вставки до нескольких строк в таблице. Убедитесь, что у вас там есть какие-то отношения!
  • Преобразуйте эти строки в файлы фикстур или напишите скрипт для выполнения команды mysql следующим образом:
    • mysql -u dbuser --password = пароль, имя_базы_пользователя_Малость_символов_mysqldump.sql
  • Выполнить тесты
  • Усеченные таблицы, на которые есть ссылки в two_rows_from_mysqldump.sql

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

Светильники хороши в использовании, вам просто нужно создать PK / FK вручную. Из-за этого я обычно тестирую только с несколькими строками. Что-то большее, чем это, тестирует слой базы данных, который выходит за рамки. Если вы хотите, чтобы данные были определенного качества, добавьте ограничения базы данных с помощью «validates_blah_blah» в вашей модели.

Надеюсь, я не делал "делай что-нибудь другое" слишком сильно, как сказал Майк Б. Я согласен, это раздражает. Но я тоже хочу посоветовать.

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