简体   繁体   中英

Rails Test::Unit does not work. But app works, console works, even console in Test::Unit works

I have a method that simply updates an attribute. :

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

It does a little bit more, but for the most part, that's it. I place a debugger before that update part and after it. And I notice while running a Unit::Test, it doesn't update the attribute.

But if in that same debugger, just copy and paste the code in the Test::Unit console, it will update with no errors. That goes for if I use Rails console, or if I use the app as a whole. Everything works fine. Except for the test.

Note, nothing is getting stubbed in my test objects. I'm using Factory girl to create my objects.

Further, if I were to throw the debugger in the tests, and run a collection on the attributes that I'm updating, they will return back unchanged , but still pass the tests , that is, except for one test that makes sure that attribute_one is updated.

This tell me that..Test::Unit is silently processing the data, and that its failing, but not for any of the reasons its telling me.

Does anyone know what this may be symptomatic of?

Update

Here's it really simplified :

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

Then the method in my model :

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

I realized the answer was to reload the object so that the test instantiated the object.

So simply doing this :

@object.reload

Allowed all the tests to pass, and the console to reflect the changes in the Test::Unit.

Though, I'm curious why that is.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM