I used to write my assertions like this:
assert user.active? refute user.inactive?
Then I joined a team where I was encouraged to write this:
assert_equal true, user.active? assert_equal false, user.inactive?
What? That doesn’t look very nice. That’s doesn’t feel very Ruby. It’s less elegant!
Here’s the thing, though: your unit tests aren’t about being elegant. They’re about guaranteeing correctness. You open the door to some insidious bugs when you test truthiness instead of truth.
- You might perform an assignment rather than comparing equality.
def active? # Should be status == :active status = :active end
- You might check the presence of an array, rather than its length.
def has_users? # Should be user_list.any? user_list end def user_list  end
Over time, I’ve gotten used to it. This style still chafes, but not as bugs caused by returning the wrong value from a predicate method.