Создание / воссоздание сгенерированной миграции записи в тестовой базе данных с помощью RSpec - PullRequest
3 голосов
/ 07 ноября 2008

У меня есть миграция в Rails, которая вставляет запись в базу данных. Модель категории зависит от этой записи. Поскольку RSpec очищает базу данных перед каждым примером, эта запись теряется и, более того, кажется, что она никогда не создается, так как RSpec, похоже, не генерирует базу данных из миграций. Каков наилучший способ создания / воссоздания этой записи в базе данных? Будет ли он использовать раньше (: все)?

Ответы [ 2 ]

6 голосов
/ 07 ноября 2008

Дело не в том, что RSpec очищает базу данных, а в том, что рейк-рейк: db: prepare копирует схему (но не содержимое) вашей базы данных dev в вашу * _test db.

Да, вы можете использовать before(:all), поскольку транзакции обертываются вокруг каждого отдельного примера, но простой файл фикстуры также будет выполнять ту же работу.

(Существует более сложное общее решение этой проблемы: переход на сервис-ориентированную архитектуру, где ваши службы 'dev' и 'test' будут полностью отдельными экземплярами. Затем вы можете указать свою конфигурацию test db на Разрабатывайте базу данных в своем тестовом сервисе, отключите rake: db: prepare и соберите свой тестовый сервис из миграций по мере его регенерации. Затем вы можете протестировать свои миграции и преобразования данных.)

2 голосов
/ 07 ноября 2008

Что мне нравится делать, так это создавать в db /igration папку с именем data, а затем помещать в нее yml fixtures, в вашем случае category.yml

Затем я создаю миграцию со следующим

def self.up
 down
 directory = File.join( File.dirname(__FILE__), "data" )
 Fixtures.create_fixtures( directory, "categories" )
end

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