Использование светильников с factory_girl - PullRequest
9 голосов
/ 28 апреля 2010

При строительстве следующего завода:

Factory.define :user do |f|
  f.sequence(:name) { |n| "foo#{n}" }
  f.resume_type_id { ResumeType.first.id }
end

ResumeType.first возвращает ноль и я получаю ошибку.

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

Я нашел похожий пример в списке рассылки factory_girl, и он должен работать.

Чего мне не хватает? Должен ли я как-то сказать factory_girl, чтобы настроить приборы перед запуском тестов?

Вот как выглядит мой test_helper:

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'

class ActiveSupport::TestCase
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
  fixtures :all
end

Ответы [ 2 ]

6 голосов
/ 30 апреля 2010

Моим решением было создать файл db / seed.rb, который содержал код модели для генерации моих начальных данных:

# Create the user roles
Role.create(:name => "Master", :level => 99)
Role.create(:name => "Admin", :level => 80)
Role.create(:name => "Editor", :level => 40)
Role.create(:name => "Blogger", :level => 30)
Role.create(:name => "User", :level => 0)

А затем включите его в мой spec_helper.rb:

ENV["RAILS_ENV"] = 'test'
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
require 'spec/autorun'
require 'spec/rails'
require "#{Rails.root}/db/seeds.rb"

(Честно говоря, мне пока не удалось заставить autospec играть хорошо с этим, поскольку он продолжает дублировать мои начальные данные, но я также не очень старался)

Это также дает преимущество в том, что Rails 3 готов и работает с задачей rake db: seed.

0 голосов
/ 07 ноября 2011

Другой вариант - добавить seed.rb в каталог test или spec и указать его в файле помощника перед вашими фабриками:

require File.expand_path(File.dirname(__FILE__) + "/seed")
require File.expand_path(File.dirname(__FILE__) + "/factories")

Рельсы 2,3

...