Rails测试::单元不起作用。但app工作,控制台工作,甚至Test :: Unit工作的控制台

时间:2012-08-13 20:39:39

标签: ruby-on-rails unit-testing testing

我有一个只更新属性的方法。 :

@objects.each do |thingamabobber|
  thingamabobber.update_attributes( { attribute_one: false, attribute_two: true } )
end

它做得多一点,但在大多数情况下,就是这样。我在该更新部分之前和之后放置了一个调试器。我注意到在运行Unit :: Test时,它不会更新属性。

但是如果在同一个调试器中,只需将代码复制并粘贴到Test :: Unit控制台中,它就会更新而没有错误。如果我使用Rails控制台,或者我作为一个整体使用该应用程序,那就是这样。一切正常。除了测试。

请注意,我的测试对象中没有任何内容。我正在使用Factory girl来创建我的对象。

此外,如果我要在测试中抛出调试器,并对我正在更新的属性运行集合,它们将返回未更改但仍然通过测试,即除了确保更新attribute_one的一项测试外。

这告诉我..Test :: Unit正在静默处理数据,并且它失败了,但不是因为它告诉我的任何原因。

有谁知道这可能是什么症状?

更新

这里真的很简单:

should "update all items" do
  @item.items.last.update_all_recurring_items( {"name" => 'Ooooohhhh Yeeeeeea! Kooolaid Goooooood!'} )
  assert_equal @item.name, @item.items.last.name
end

然后是我模型中的方法:

def update_all_recurring_items params = {}
  parent = self.recurring_items.present? ? self : Item.find(self.recurring_item_id)
  parent.recurring_items.each do |item|
    # Everything ok up to here. If I run the below method it works.
    item.update_attributes( params )
    # But! The Test Suit just skips over this like nothing ever happened.
  end
  parent.update_attributes(params) if self != parent
end

1 个答案:

答案 0 :(得分:0)

我意识到答案是重新加载对象,以便测试实例化对象。

如此简单地这样做:

@object.reload

允许所有测试通过,控制台反映Test :: Unit中的更改。

尽管如此,我很好奇为什么会这样。