[rspec-users] How do I specify that a class does not receive any message

Lenny Marks lenny at aps.org
Wed Aug 22 18:08:40 UTC 2012


On Aug 22, 2012, at 1:38 PM, Lenny Marks wrote:

> 
> On Aug 22, 2012, at 10:36 AM, David Chelimsky wrote:
> 
>> On Wed, Aug 22, 2012 at 9:16 AM, J. B. Rainsberger <me at jbrains.ca> wrote:
>>> On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky <dchelimsky at gmail.com>
>>> wrote:
>>>> 
>>>> On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger <me at jbrains.ca> wrote:
>>>>> On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde <basv at odd-e.com> wrote:
>>>>>> 
>>>>>> 
>>>>>> JB is right.
>>>>>> 
>>>>>> Sometimes, for clarity, it is useful to add should_not, but for
>>>>>> functionality it is usually not needed.
>>>>> 
>>>>> 
>>>>> I know JMock has never() for this people. Should RSpec-mocks have
>>>>> something
>>>>> like object.should_receive(:nothing).
>>>> 
>>>> never() is not a catch all for _all_ messages. It is for a specific
>>>> message, just like it is in rspec-mocks
>>>> 
>>>> # rspec
>>>> object.should_receive(:msg).never
>>>> 
>>>> #jmock
>>>> never(object).msg()
>>> 
>>> 
>>> In JMock, you can write this:
>>> 
>>> never(object);
>>> 
>>> and this means "never anything". Just like
>>> 
>>> ignoring(object);
>>> allowing(object);
>>> 
>>> which each equate to mock().as_null_object().
>> 
>> Perhaps it goes without saying, but I was not aware of that ;)
>> 
>> As you noted earlier this thread (not quoted above) RSpec::Mocks::Mock
>> instances (returned by double(), mock(), or stub()) are strict by
>> default - e.g. they'll complain about any unexpected messages.
>> Obviously that does not account for any real objects.
>> 
>> I'm open to adding an API for this, but not
>> object.should_receive(:nothing) since that syntax is for declaring
>> expected messages.
>> 
> 
> +1 for me. I've found myself on occasion using should_not_receive(:some_message). OK, see a failing spec, make it pass, but what about when the collaborator method is renamed. All those should_not_receive expectations will still pass no matter what. It would be great to have object.should_receive(:nothing) instead. This would make life easier when collaborators are stubbed out with :as_null_object stubs.

I mean some equivalent to object.should_receive(:nothing). Maybe object.should_receive_nothing ?? 

> 
> -lenny
> 
>> Other ideas welcome.
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
> 
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list