我有一个简单地更新属性的方法。:
@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