При создании следующей фабрики:
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
Моим решением было создать файл db/seeds.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.