rspec с заводской девушкой - PullRequest
0 голосов
/ 15 августа 2011

У меня есть следующие фабрики:

Factory.define :producer, :class => User do |f|
  f.sequence(:email) { |n| "producer_#{n}@shit.com" }
  f.password  "foobar"
  f.password_confirmation "foobar"
  f.role      "producer"
end

Factory.define :business do |f|
  f.sequence(:name) { |n| "business_#{n}" }
  f.association(:producer, :factory => :producer)
end

Factory.define :deal do |d| 
  d.sequence(:title) { |n| "deal_#{n}" }
  d.sequence(:desc) { |n| "deal_desc_#{n}" }
  d.cap "50" 
  d.rate "2" 
  d.start Date.today - 1     # This is the date where you put in db
  d.end Date.today + 7
  d.association :business
end

сейчас, когда я делаю следующее:

  before(:each) do 
    @consumer = test_sign_in(Factory(:consumer))
    @deal = Factory(:deal)
  end

Я получаю ошибку:

 Failure/Error: @deal = Factory(:deal)
 NoMethodError:
   undefined method `producer=' for #<Business:0x007fb494290090>
 # ./deals_controller_spec.rb:15:in `block (4 levels) in <top (required)>

(Строка 15 относится к @deal = Factory(:deal))

Кто-нибудь знает почему?Я очень плохо знаком с заводской девушкой и не могу найти документацию, объясняющую связь и последовательность очень хорошо.

1 Ответ

1 голос
/ 15 августа 2011

Проблема здесь явно связана с созданием вашей producer ассоциации.

Поскольку вы используете старый dsl, я бы предложил два решения:

Factory.define :business do |f|
  f.sequence(:name) { |n| "business_#{n}" }
  #try this:
  f.association(:user, :factory => :producer)
  #or this:
  f.after_build { |biz| biz.user = Factory.build(:producer) }
end

Использование after_build или after_create действительно является вопросом выбора, в зависимости от ваших целей тестирования.

Вот ссылка на новый поиск DSL .

...