【问题标题】:rspec with factory girlrspec 与工厂女孩
【发布时间】:2011-08-15 16:25:12
【问题描述】:

我有以下工厂:

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)

有人知道为什么吗?我对工厂女孩很陌生,我似乎找不到很好地解释关联和序列的文档。

【问题讨论】:

    标签: ruby-on-rails rspec factory-bot


    【解决方案1】:

    这里的问题显然与您的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_buildafter_create 的使用实际上是一个选择问题,具体取决于您的测试目的。

    Here is a link to the new dsl lookup.

    【讨论】:

    • 感谢您的回答,但尽管进行了更改,但我仍然遇到相同的错误。你知道为什么吗? (我也更新了主要问题)
    • mmmm,你试过after_build方法吗?
    • 是的,我也是。你知道是什么启发了制作人= Factory 的任何地方吗?
    • businessuser是什么关系?错误在链中:Factory(:deal) => triggers Factory(:business) => 由于关系而触发 Factory(:producer) 错误(因此是我的问题)
    • 我把它贴在一个要点中,因为它很长。这是 1:1。 gist.github.com/7899955d8e2f033ed1b2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多