[rspec-users] hash form of stub_chain returning nil for chains with shared first message
David Chelimsky
dchelimsky at gmail.com
Sat Feb 12 15:43:41 EST 2011
On Feb 12, 2011, at 5:55 PM, David Chelimsky wrote:
>
> On Feb 11, 2011, at 7:51 AM, Frederick Cheung wrote:
>
>> On Feb 10, 7:30 pm, David Chelimsky <dchelim... at gmail.com> wrote:
>>> On Feb 10, 2011, at 12:40 PM, Frederick Cheung wrote:
>>>
>>>> I'm new using rspec, so please forgive me if I'm barking up the wrong tree, but...
>>>
>>>> I'd expect this to pass (using rspec 2.5.1)
>>>
>>>> describe 'stub_chain' do
>>>> it "returns expected value from two chains with hash" do
>>>> subject = Object.new
>>>> subject.stub_chain(:msg1, :msg2 => :first)
>>>> subject.stub_chain(:msg1, :msg3 => :second)
>>>
>>> This ^^ is not documented to work. Seehttp://relishapp.com/rspec/rspec-mocks/v/2-5/dir/method-stubs/stub-a-....
>>>
>>> Try:
>>>
>>> subject.stub_chain(:msg1, :msg2).and_return(:first)
>>>
>>> If that works, feel free to submit a feature request to support the format you were using.
>>>
>>
>> Fair enough. I'd been reading stub_chain_spec.rb (which does do stuff
>> like @subject.stub_chain(:msg1, :msg2, :msg3, :msg4 => :return_value))
>> rather than stub_chain.feature and had taken that (as well as
>> https://github.com/rspec/rspec-mocks/commit/2c23b86cc5aaa99557df456054765e95aa1a0d5a
>> ) to mean that subject.stub_chain(:msg1, :msg2 => :first) was official
>
> I was wrong. I'd consider this documented, and that what you are experiencing is a bug.
>
> Please submit an issue (https://github.com/rspec/rspec-mocks/issues).
FYI - I've already fixed this: https://github.com/rspec/rspec-mocks/commit/ca2d83712fe329affbe4334c8c292c40ae74e5ce
Feel free to submit an issue anyhow if you like, and I'll note this commit in the issue.
Cheers,
David
>
> Thx,
> David
>
>
>>
>> Fred
>>
>>> Cheers,
>>> David
>>>
>>>
>>>
>>>
>>>
>>>> subject.msg1.msg2.should equal(:first)
>>>> subject.msg1.msg3.should equal(:second)
>>>> end
>>>> end
>>>
>>>> But it doesn't - subject.msg1.msg3 returns nil
>>>
>>>> I think this is because in stub_chain (in rspec-mocks/lib/rspec/mocks/methods.rb, line 43) there is
>>>
>>>> if matching_stub = __mock_proxy.__send__(:find_matching_method_stub, chain[0].to_sym)
>>>> chain.shift
>>>> matching_stub.invoke.stub_chain(*chain)
>>>> else
>>>
>>>> ie blk isn't used in any way. Changing this to matching_stub.invoke.stub_chain(*chain, &blk) makes my example pass
>>>> Is this true or am I just misusing rspec?
>>>
>>>> Fred
More information about the rspec-users
mailing list