Как загрузить db:seed данные в тестовую базу данных автоматически?

Вам необходимо аннотировать поля POJO с помощью @Key:

import com.google.api.client.util.Key;

// ...

@Key private String to;
@Key private Object data;
@Key private List<String> registration_ids;

// ...
117
задан Luke Francl 15 October 2009 в 20:21
поделиться

6 ответов

db: Задача seed rake в основном просто загружает скрипт db / seed.rb . Поэтому просто запустите этот файл для загрузки данных.

load "#{Rails.root}/db/seeds.rb"

# or

Rails.application.load_seed

Где разместить, это зависит от того, какую среду тестирования вы используете, и хотите ли вы, чтобы он загружался перед каждым тестом или только один раз в начале. Вы можете поместить его в вызов setup или в файл test_helper.rb .

load "#{Rails.root}/db/seeds.rb"

# or

Rails.application.load_seed

Где разместить, это зависит от того, какую среду тестирования вы используете, и хотите ли вы, чтобы она загружалась перед каждым тестом или только один раз в начале. Вы можете поместить его в вызов setup или в файл test_helper.rb .

load "#{Rails.root}/db/seeds.rb"

# or

Rails.application.load_seed

Где разместить, это зависит от того, какую среду тестирования вы используете, и хотите ли вы, чтобы она загружалась перед каждым тестом или только один раз в начале. Вы можете поместить его в вызов setup или в файл test_helper.rb .

117
ответ дан 24 November 2019 в 02:06
поделиться

Я бы сказал, что это должно быть

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end

Поскольку db: test: load не выполняется, если у вас есть config.active_record.schema_format =: sql (db: test: clone_structure is)

85
ответ дан Eugene Bolshakov 5 November 2019 в 08:48
поделиться

Я считаю, комментарий Стива выше должен быть правильным ответом. Вы можете использовать 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

Надеюсь, это поможет.

13
ответ дан Community 5 November 2019 в 08:48
поделиться

Для тех, кто использует банк семян, он меняет способ загрузки семян, поэтому вы, вероятно, не можете / не хотите использовать решение 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
3
ответ дан Gary S. Weaver 5 November 2019 в 08:48
поделиться

Мы вызываем db: seed как часть db: test: prepare с помощью:

Rake :: Task ["db: seed"]. Invoke

Таким образом , начальные данные загружаются один раз за весь тестовый прогон, а не один раз за тестовый класс.

3
ответ дан 24 November 2019 в 02:06
поделиться

Putting something like this in lib/tasks/test_seed.rake should invoke the seed task after db:test:load:

namespace :db do
  namespace :test do
    task :load => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end
17
ответ дан 24 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: