2011-11-04 48 views
1

對於控制器測試,在我定義的模型規範的頂部:Rspec的越來越「堆棧層次過深,」從協會

let(:user) { Factory(:user, :company => company) } 
    let(:facility) { Factory(:facility, :company => company) } 
    let(:company) { Factory(:company, :facilities => [facility]) } 

,並做基本指標規格:

context "responding to GET index" do 
    it "should expose all facilities as @facilities" do 
     user.company.should_receive(:facilities).and_return([facility]) 
     get :index 
     assigns[:facilities].should == [facility] 
    end 
    end 

但我發現了這個錯誤:

should expose all facilities as @facilities 
stack level too deep 
/Users/dmix/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.6.4/lib/rspec/core/let.rb:90 
88  module InstanceMethods 
89  def __memoized # :nodoc: 
90   @__memoized ||= {} 
91  end 
92  end 

這個問題似乎在同一時間被引用的3家工廠。

如果我刪除:從公司工廠定義設施,堆棧錯誤去的方式:

let(:company) { Factory(:company) } 

我怎麼廠三個型號,所有沒有得到一個計算器相互引用?

回答

2

問題是您的facilitycompany對象互相引用。我認爲您的company工廠的:facilities => [facility]部分可能是不必要的,因爲您已指定facility對象的公司爲company。試試這個:

let(:facility) { Factory(:facility, :company => company) } 
let(:company) { Factory(:company) } 
+0

那的確修復了堆太深的錯誤,但它打破了測試,如:user.company.should_receive(:設施).and_return([工具]) – dMix

+0

在工廠創建測試後,你能簡單地將設施分配給公司嗎? – jaydel