Как загрузить 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"чтобы мой метод настройки работал нормально, хотя.Я хотел бы, чтобы эти семена загружались автоматически и сохранялись, но я еще не нашел способ сделать это!