Making Rspec errors with anything less verbose


#1

Hello,

I was doing some work on cucumber and it hit me that this error message
from a failed spec was a little too verbose.

The spec test is:

Cucumber::Tree::RowScenario.should_receive(:new).with(anything,
anything, [‘I can have spaces’], anything)

And when the test fails the output is:

Spec::Mocks::MockExpectationError in
‘Cucumber::TreetopParser::FeatureParser should allow backslashed | in
FIT values’
Mock ‘Class’ expected :new with
(#Spec::Mocks::ArgumentConstraints::AnyArgConstraint:0x11c5a4c,
#Spec::Mocks::ArgumentConstraints::AnyArgConstraint:0x11c4e94, [“I can
have | and its ok”],
#Spec::Mocks::ArgumentConstraints::AnyArgConstraint:0x11c4de0) but
received it with (#<Cucumber::Tree::Feature:0x11b5cc8 @header=“Some
title”, @scenarios=[#<Cucumber::Tree::Scenario:0x11b5bd8 @name=“second”,
@feature=#<Cucumber::Tree::Feature:0x11b5cc8 …>,
@steps_and_given_scenarios=[#<Cucumber::Tree::Step:0x11b5a70
@name="‘bind me please’", @keyword=“Given”, @line=4,
@scenario=#<Cucumber::Tree::Scenario:0x11b5bd8 …>>],
@table_header=[“c”]>]>, #<Cucumber::Tree::Scenario:0x11b5bd8
@name=“second”, @feature=#<Cucumber::Tree::Feature:0x11b5cc8
@header=“Some title”, @scenarios=[#<Cucumber::Tree::Scenario:0x11b5bd8
…>]>, @steps_and_given_scenarios=[#<Cucumber::Tree::Step:0x11b5a70
@name="‘bind me please’", @keyword=“Given”, @line=4,
@scenario=#<Cucumber::Tree::Scenario:0x11b5bd8 …>>],
@table_header=[“c”]>, [“I can have \”, “and its ok”], 7)

Its a little hard to read! What I think might be more helpful is to
replace arguments that match ‘anything’ with a wild card such as ‘_’.
This would give me the much easier to read error message:


Spec::Mocks::MockExpectationError in
‘Cucumber::TreetopParser::FeatureParser should allow backslashed | in
FIT values’
Mock ‘Class’ expected :new with (_, _, [“I can have | and its ok”], )
but received it with (
, _, [“I can have \”, “and its ok”], _)

So what I’m suggesting is

  1. Replace:
    #Spec::Mocks::ArgumentConstraints::AnyArgConstraint:0x11c5a4c
    With: ‘_’

  2. Replace received with parameters which are marked in the expectation
    as anything with ‘_’

Does that seem sensible?
Is there value to seeing arguments received when you have marked them as
‘anything’?


Joseph W.
http://www.joesniff.co.uk