Тест модели FactoryGirl Rspec не пройден

У меня есть приложение для отслеживания клиентов, рабочих мест и часов (и тому подобного). Я использую рельсы 3.2.2 и rspec_rails 2.13.0. Я слежу за pdf-книгой dailyrailsrspec Аарона Самнера.

Мои отношения таковы: у клиентов может быть много работы, у работы может быть много часов.

Я тестирую свои модели. Тесты клиентов и рабочих мест проходят нормально. Это мои часовые тесты, я не могу приступить к работе, и я только начал это делать. Я не могу пройти тест "Test Factory". Вздох.

Фабрика часов:

# spec/factories/hours.rb

FactoryGirl.define do
  factory :hour do
    job = FactoryGirl.create(:job)
    job_id job.id
    first_name "John"
    last_name  "Smith"
    hours 8
    date_worked "2013-04-27"
    description "Did some work"
  end
end

Hours нуждается в job_id, поэтому я создаю задание, используя фабрику заданий, чтобы получить из нее job_id. Я делаю то же самое на своей фабрике рабочих мест, чтобы получить customer_id, и все работает нормально. Это строка, в которой «я считаю», что ошибка блокируется. Кажется, он говорит мне, что не видит мою фабрику рабочих мест.

Вывод ошибки (частичный) - см. первую и последнюю строки:

/Users/johndcowan/.rvm/gems/ruby-1.9.2-p318/gems/factory_girl-4.2.0/lib/factory_girl/registry.rb:24:in `find': Factory not registered: job (ArgumentError)
from /Users/johndcowan/.rvm/gems/ruby-1.9.2-p318/gems/factory_girl-4.2.0/lib/factory_girl/decorator.rb:10:in `method_missing'
from /Users/johndcowan/.rvm/gems/ruby-1.9.2-p318/gems/factory_girl-4.2.0/lib/factory_girl.rb:71:in `factory_by_name'
from /Users/johndcowan/.rvm/gems/ruby-1.9.2-p318/gems/factory_girl-4.2.0/lib/factory_girl/factory_runner.rb:12:in `run'
from /Users/johndcowan/.rvm/gems/ruby-1.9.2-p318/gems/factory_girl-4.2.0/lib/factory_girl/strategy_syntax_method_registrar.rb:19:in `block in define_singular_strategy_method'
from /Users/johndcowan/MyWebSites/drywall/spec/factories/hours.rb:5:in `block (2 levels) in <top (required)>'
...

Первая строка в выводе имеет: Фабрика не зарегистрирована: работа (ArgumentError) Означает ли это, что она не видит мою фабрику вакансий?

Строка 5 на фабрике: job = FactoryGirl.create(:job)

Фабрика рабочих мест, если это поможет:

# spec/factories/jobs.rb

FactoryGirl.define do
  factory :job do
    # need a customer for the customer_id field
    customer = FactoryGirl.create(:customer)
    customer_id customer.id
    sequence(:name) { |n| "Job#{n}" }
    sequence(:address) { |x| "#{x} Main Str" }
    city "Cortland"
    state "NY"
    zip "13045"
    sequence(:phone) { |y| "607-75#{y}-1234" }
    description "Drywall Work"
  end
end

мой спец тест

# spec/models/hour_spec.rb
require 'spec_helper'

describe Hour do
  it "has a valid factory" do
    FactoryGirl.create(:hour).should be_valid
  end
end

Спасибо за любое понимание. --jc


person John Cowan    schedule 30.05.2013    source источник


Ответы (1)


Неверное определение ассоциации. Попробуйте использовать документированный способ

factory :hour do
  job #this is enough
  first_name "John"
  last_name  "Smith"
  hours 8
  date_worked "2013-04-27"
  description "Did some work"
end
person Billy Chan    schedule 30.05.2013
comment
Билли Чан, ты Д'ман. Спасибо! Всегда чему-нибудь учусь на этом форуме. - person John Cowan; 30.05.2013