Как загрузить светильники seed_fu перед тестированием с помощью rspec? - PullRequest
1 голос
/ 12 января 2012

Я пытаюсь настроить rspec для тестирования в моем приложении rails. Я создал образец теста и выполнил rake rspec --trace.

В выводе я вижу это сообщение

** Invoke spec:models (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment 
** Execute db:schema:load

Схема загружается, а затем разбивает задачи, потому что я пытаюсь использовать некоторые значения из базы данных в одном из файлов в каталоге инициализаторов. Обычно эти записи находятся в базе данных, все они присутствуют в файлах seed_fu в каталоге db / fixtures.

Я ищу способ выполнить эти файлы после db:schema:load. Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Похоже, что вы можете получить доступ к сеялке напрямую с помощью простого вызова SeedFu.seed.

Это дает преимущество в том, что семена запускаются в правильном порядке, и, если вам нужно, вы можете передавать аргументы дляконкретные пути к приборам или параметры фильтрации - я мог бы видеть использование определенного пути, полезного, например, для приборов только для тестирования.

Вот метод seed-fu:

# Load seed data from files
# @param [Array] fixture_paths The paths to look for seed files in
# @param [Regexp] filter If given, only filenames matching this expression will be loaded
def self.seed(fixture_paths = SeedFu.fixture_paths, filter = nil)
  Runner.new(fixture_paths, filter).run
end

Понятия не имеюесли этот метод предназначен для публичного использования, но сейчас, по крайней мере, он хорошо работает для моих целей.

1 голос
/ 12 января 2012

Я придумал приемлемое, но не идеальное решение.Я удалил ссылку на базу данных из файла initailizers и заменил ее простым целочисленным присваиванием.Чтобы загрузить мои семена, я добавил эту строку в spec_helper.rb

Dir[Rails.root.join("db/fixtures/*.rb")].each {|file| load file }
0 голосов
/ 08 ноября 2016

Вы можете запустить это в тестах rspec перед запуском:

`rake db:seed_fu`

или

`rake db:seed_fu FILTER=locales`

и после испытаний

`rake db:reset`

Обратите внимание на магические кавычки - ``

Пример:

describe "POST /v1/products" do
  before(:all) do
    `rake db:seed_fu FILTER=4_locales`
  end

  after(:all) do
    `rake db:reset`
  end

  ...
end
...