具有隐式has_many关联的Factory Girl

时间:2012-02-01 20:26:07

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

我正在尝试测试具有隐式has_many关联的模型,并且遇到了一些困难。

我有一个表A,其中包含B_ID列,其中B基本上是一个外键 - 除了我的数据库中没有表B,或者是与对象B关联的活动记录类。还有表C有列a B_ID。

在表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>

在c1.alphas.count更改中更改共享B_ID结果的A对象的数量,但我似乎无法实际隐藏在隐式关联中并获得A对象 - 而是我总是为零。在我的C模型中还有其他方法无法测试,因为这些方法需要访问单个A对象上的字段。

有没有人能够深入了解幕后的情况,或者我可以做些什么来解决这个问题?感谢。

1 个答案:

答案 0 :(得分: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 )