Что вы, вероятно, наблюдаете, так это то, что тестовая среда не выполняет миграцию (db: migrate), а загружает непосредственно db / schema.rb (db: load).
У вас есть два варианта:
- продолжать использовать миграцию для производства и разработки; для тестовой среды добавьте ваши постоянные данные в соответствующие файлы yml в db / fixtures
- оставьте существующие файлы db / fixtures нетронутыми и создайте другой набор yml-файлов (содержащих постоянные данные) в том же ключе, что и db / fixtures, но пригодные для использования как в среде тестирования, так и в среде разработки / разработки при выполнении rake db: инициализация схемы загрузки
Чтобы охватить те сценарии, в которых используется db: load (вместо db: migrate - например, test, создание новой базы данных на новой машине разработки с использованием более быстрого db: load вместо db: migrate и т. Д.), Создайте вставьте rakefile в RAILS_APP / lib / tasks, чтобы дополнить задачу db: load, загрузив ваши постоянные данные инициализации из «начальных» yml-файлов (по одному для каждой модели) в базу данных.
В качестве примера используйте задание db: seed rake. Поместите данные вашего семени в db / seed / .yml
#the command is: rake:db:load
namespace :db do
desc 'Initialize data from YAML.'
task :load => :environment do
require 'active_record/fixtures'
Dir.glob(RAILS_ROOT + '/db/seeds/*.yml').each do |file|
Fixtures.create_fixtures('db/seeds', File.basename(file, '.*'))
end
end
end
Чтобы охватить инкрементные сценарии (db: migrate), определите одну миграцию, которая выполняет те же действия, что и описанная выше задача.
Если ваши начальные данные когда-либо изменяются, вам нужно будет добавить еще одну миграцию, чтобы удалить старые начальные данные и вместо этого загрузить новые, что может быть нетривиально в случае зависимостей от внешнего ключа и т. Д.