[rspec-users] hash form of stub_chain returning nil for chains with shared first message

Frederick Cheung frederick.cheung at gmail.com
Fri Feb 11 04:51:13 EST 2011


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

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
>
> > _______________________________________________
> > rspec-users mailing list
> > rspec-us... at rubyforge.org
> >http://rubyforge.org/mailman/listinfo/rspec-users
>
> _______________________________________________
> rspec-users mailing list
> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users


More information about the rspec-users mailing list