2012-02-01 92 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