I'm crossing the streams on this one. I first responded on GitHub, but the GGroup is likely a better avenue for the rest of my response. Here is my first response:
As a follow up, I created a couple of methods using verify_true.
Running those gives more indication as to what I expect from matchers. I may be wrong, but I'll explain my approach to using them.
When I am using a verify_ method, I try to separate that from any evaluation I can do. Additionally, I make a point to use the appropriate method. So for example if I were expecting to compare to integers, I would use
matchers.verify_equal(expected_number, result_value, "Resultant number of this thing does not match expected number of this thing")
I also use the message to communicate with other humans, so we should begrudgingly make it obvious and understandable by them. Following that, I would only use a verify_true if I were assessing the value of a boolean.
result = self.do_something_successfully() # assuming that returns a boolean.
matchers.verify_true(result, "I did that thing and it was supposed to return a true, but it was false.)
To put that together into my gist examples, if I were actually doing something along these lines, I would:
When using verify_true, use methods to evaluate expectations vs reality, have these methods return boolean values. (I like the word is_ ).
Write verbose messages that describe the conditions I expected when calling verify_true on this value.
Use verify_equal or verify_in when attempting to determine if a dictionary, or values in a dictionary match expectations.