Forum: RSpec Making Rspec errors with anything less verbose.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Joseph W. (Guest)
on 2008-10-08 19:43
(Received via mailing list)
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
This topic is locked and can not be replied to.