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