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

David Chelimsky dchelimsky at gmail.com
Thu Feb 10 14:30:50 EST 2011


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. See http://relishapp.com/rspec/rspec-mocks/v/2-5/dir/method-stubs/stub-a-chain-of-methods.

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.

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-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list