[rspec-users] Argument Non-Matchers

David Chelimsky dchelimsky at gmail.com
Wed Apr 11 17:31:09 UTC 2012


On Wed, Apr 11, 2012 at 12:18 PM, Matt Hauck <matthauck at gmail.com> wrote:
> On Tuesday, April 10, 2012 8:48:37 PM UTC-7, Justin Ko wrote:
>>
>>
>> On Apr 9, 2012, at 2:41 PM, Matt Hauck wrote:
>>
>> Is there a way to specify a message expectation on an object to occur
>> _without_ a particular argument?
>>
>> There is a particular function, which in some special circumstance takes a
>> unique argument, but in normal circumstances does not take this unique
>> argument. I want to say something like this:
>>
>> it "should recognize the special state" do
>>
>> obj.set_special_state true
>> obj.should_receive(:my_method).with(/special_state/)
>> obj.my_method
>>
>> end
>> it "should operate fine without the special state" do
>>
>> obj.set_special_state false
>> obj.should_receive(:my_method).without(/special_state/)
>> obj.my_method
>>
>> end
>>
>> This does not appear to be possible to set a "non-expectation" on an
>> argument matcher. Is there a way to do this? Or am I just going about this
>> the wrong way?
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>>
>> Sorry for the late reply. This is what you want:
>>
>> http://rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ArgumentMatchers:no_args

> Hmm, that's not exactly what I was thinking of... I don't mean that there
> should be no arguments at all, but that the arguments should _not_ be of a
> certain match.
>

You can do this:

obj.should_receive(:my_method) do |arg|
  arg.should_not match(/special_state/)
end

HTH,
David


More information about the rspec-users mailing list