I use a Comparable object whenever possible, as David said. Other than
that, I just do one expectation per line. That way when one fails, I
know exactly where the failure is.
module CustomMatchers
class BreakDownTo
def initialize(expected) @expected = expected
end
def matches?(target)
@target = target
@failed = false
@expected.each_pair do |k,v|
unless @target.send(k) == @expected[k]
@failed = k
end
end
!@failed
end
def failure_message
"expected #{@failed} to be |#{@expected[@failed]}| " +
"but was |#{@target.send(@failed)}|"
end
def megative_failure_message
"expected #{@failed} not to be |#{@expected[@failed]}| " +
"and was |#{@target.send(@failed)}|"
end
end
Actual matcher that is exposed.
def break_down_to(expected)
BreakDownTo.new(expected)
end
end
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.