R Spec Stack level太深(系统堆栈错误)

时间:2017-01-18 12:13:38

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

我有三个型号offer_ticket,事件和报价,下面有三个各自的工厂是模型和工厂给我错误堆栈级别太深。 循环执行offer_ticket-to-event,event-to-offer,然后是offer-to-offer_tickets 建议我解决如何删除此错误

  

offer_Ticket

class Offer Ticket < Active Record::Base
    belongs_to :event
end
  

事件

class Event < Active Record::Base
   has_many     :offers , dependent: :restrict_with_error
   has_many :offer_tickets , dependent: :restrict_with_error
end
  

报价

class Offer < Active Record::Base
   has_many :offer_tickets , dependent: :restrict_with_error
   belongs_to :event
end

他们各自的工厂如下所示

  

offer_tickets

Factory Girl define do
   factory :offer_ticket do
      venue_row_id        1
      sale_id             1
      status              "available"
      seat_number         1
      association(:event)
   end
end
  

事件

Factory Girl define do
   factory :event do |f|

      f.name { Faker::Name.name  }
      f.starts_at { Faker::Date.backward(Random.rand(20)).to_date }
      f.description { Faker::paragraph }
      after(:build) do |event|
         create(:offer, event: event)
      end
   end
 end
  

优惠

Factory Girl define do
  factory :offer do
    price                   1
    proxy                   1
    multiple                1
    cancel-others            1
    after(:build) do |offer|
       create(:offer_ticket, offer: offer)
    end
    association(:event)
  end

1 个答案:

答案 0 :(得分:0)

最可能的原因可能是您工厂之间的依赖关系。

假设您要使用工厂女孩创建一个Event,其中包含问题中提到的工厂。执行FactoryGirl.create(:event)会尝试创建Offer(请参阅事件工厂的:after_build)和...

此优惠的创建会触发优惠工厂的:after_build,它会尝试创建OfferTicket ...

在offer_ticket工厂中,它定义了association :event,它将再次尝试创建Event。因此,这将导致无限循环

我的建议是使用after_build在您的案例中创建新对象。您可以单独创建它们,然后再分配给父对象。如果你提供一些rspec代码,它可能会改善我的答案。