Как загрузить db: seed data в тестовую базу данных автоматически?
Я пытаюсь использовать новый стандартный способ загрузки семенных данных в Rails 2.3.4+,db:seed
задач рейка.
я загружаю постоянные данные, которые необходимы для того, чтобы мое приложение действительно функционировало правильно.
каков лучший способ получить db:seed
задача для запуска перед тестами, поэтому данные предварительно заполнены?
7 ответов:
The
db:seed
грабли задача в первую очередь просто загружаетdb/seeds.rb
сценарий. Поэтому просто выполните этот файл, чтобы загрузить данные.load "#{Rails.root}/db/seeds.rb"
где разместить это зависит от того, какие рамки тестирования вы используете и хотите ли вы, чтобы он был загружен перед каждым тестом или только один раз в начале. Вы могли бы положить его в
setup
звонок или .
Я бы сказал, что он должен быть!--2-->
namespace :db do namespace :test do task :prepare => :environment do Rake::Task["db:seed"].invoke end end end
потому что db:test: load не выполняется, если у вас есть конфигурация.активная запись.schema_format =: sql (db: test: clone_structure is)
помещая что-то вроде этого в lib/tasks/test_seed.рейк должен вызвать начальную задачу после db: test:load:
namespace :db do namespace :test do task :load => :environment do Rake::Task["db:seed"].invoke end end end
Я считаю Стив комментария выше должен быть правильный ответ. Вы можете использовать
Rails.application.load_seed
для загрузки исходных данных в тестовую среду. Однако, когда и как часто эти данные загружаются зависит от нескольких вещей:С Помощью Minitest
нет удобного способа запустить этот файл один раз перед всеми тестами (см. эта проблема Github). Вам нужно будет загрузить данные один раз перед каждым тестом, вероятно, в методе установки ваших тестовых файлов:
# test/models/my_model_test.rb class LevelTest < ActiveSupport::TestCase def setup Rails.application.load_seed end # tests here... end
С Помощью RSpec
используйте RSpec
before(:all)
метод загрузки исходных данных для всех тестов для этой модели:describe MyModel do before(:all) do Rails.application.load_seed end describe "my model..." do # your tests here end
надеюсь, что это помогает.
мы вызываем db: seed как часть db: test: prepare, with:
Rake::Task["db:seed"].invoke
таким образом, начальные данные загружаются один раз для всего тестового запуска, а не один раз для каждого тестового класса.
для тех, кто использует seedbank, он изменяет способ загрузки семян, поэтому вы, вероятно, не можете/не хотите использовать
load ...
решение здесь.и
Rake::Task['db:seed'].invoke
в test_helper в результате:Don't know how to build task 'db:seed' (RuntimeError)
но когда мы добавили load_tasks до этого, это сработало:
MyApp::Application.load_tasks Rake::Task['db:seed'].invoke
добавлять
Rake::Task["db:seed"].invoke
доdb:test:prepare
грабли задача не работает для меня. Если я подготовил базу данныхrake db:test:prepare
, а затем вошел в консоль в тестовой среде, все мои семена были там. Однако семена не сохранялись между моими тестами.добавлять
load "#{Rails.root}/db/seeds.rb"
чтобы мой метод настройки работал нормально, хотя.Я хотел бы, чтобы эти семена загружались автоматически и сохранялись, но я еще не нашел способ сделать это!