2012-02-01 81 views
1

我正在嘗試測試具有隱式has_many關聯的模型,並且遇到一些困難。隱含has_many關聯的工廠女孩​​

我有一個表A,列B_ID,其中B基本上是一個外鍵 - 除了我的數據庫中沒有表B,或與對象B關聯的活動記錄類。還有表C具有列投標。

在模型表C中有:

# implicit has_many :alphas 
def alphas 
    Alpha.where(:b_id => b_id).order(:xyz) 
end 

這個數據庫結構是有道理的,因爲我有數據,和非測試代碼工作正常。

我的測試代碼幾乎可行,我希望我只是缺少一些簡單的東西。

我有A和C所定義的工廠,以及我有一個測試:

a1 = Factory(:alpha, :b_id => 123, :xyz => 100) 
a2 = Factory(:alpha, :b_id => 123, :xyz => 200) 
c1 = Factory(:c, :b_id => 123) 

puts c1.alphas.count 
puts c1.alphas.first 

c1.alphas.first.should == a1 

的輸出是:

2 
nil 
<test fails> 

改變共享B_ID結果在A的對象的數量c1.alphas.count發生了變化,但我似乎無法真正在隱式關聯中獲得一個A對象 - 而是總是得到零。在我的C模型中還有其他的方法,我無法測試,因爲這些方法需要訪問單個A對象上的字段。

有沒有人對這裏幕後的事情有所瞭解,或者我可以做些什麼來解決這個問題?謝謝。

+0

您能得到什麼,如果你把'c1.alphas.class.name'? – 2012-02-01 20:44:13

+0

@BenLee,ActiveRecord :: Relation – jtabak 2012-02-01 21:12:06

+0

出於好奇,'放置c1.alphas.to_a [0]'顯示記錄?那麼'放置c1.alphas.limit(1).to_a [0]'?我只是好奇,如果破損在後臺自動加載以某種方式失敗。 – 2012-02-01 21:33:38

回答

1

請看一下這個例子,讓admin_user的角色爲Admin。

https://github.com/drhenner/ror_ecommerce/blob/master/spec/factories/user.rb

在這種情況下,角色是不是一個工廠。

儘管如此,我發現最好做到這一點。

@order = Factory(:order) 
    order_item = Factory(:order_item, :total => 5.52) 
    @order.stubs(:order_items).returns([order_item, order_item]) 

@order = Factory(:order) 
    order_item = Factory(:order_item, :total => 5.52, :order => @order) 
+0

扼殺這個協會不是我想到的乾淨解決方案,但它完成了工作 – jtabak 2012-02-02 23:02:23

+0

那麼,我是否刪除了答案?堆棧溢出已要求我。是的,我應該有一個免責聲明,我在上面的鏈接中引用了我自己的代碼。對不起如果我以前沒有說過。 – drhenner 2012-02-03 04:49:51