On Fri, Mar 28, 2008 at 1:38 PM, Chuck Remes <[EMAIL PROTECTED]> wrote: > I'm trying to use a mock to return a hash so that #each_pair can > process it. I can't get it to work. Whatever I return to #each_pair is > ignored and the block never gets executed. Here's an example > illustrating the problem. > > require File.join(File.dirname(__FILE__), %w[spec_helper]) > > class MyExample > attr_reader :result > > def example(data) > data.each_pair do |key, value| > @result = {key => value} > end > end > end > > describe MyExample, "mock#each_pair fails" do > it "should return a hash after processing the mock using each_pair" > do > sample_mock = mock("sample") > real_hash = {:key => :value} > sample_mock.should_receive(:each_pair).once.and_return(real_hash) > obj = MyExample.new > obj.example(sample_mock) > obj.result.should == real_hash > end > end
each_pair does not return the hash, it yields it to a block. Try this: sample_mock.should_receive(:each_pair).once.and_yield(real_hash) > > I tried returning different things in case the hash was the wrong > intermediate. I tried: > #and_return([:key, :value]) > #and_return([[:key, :value]]) > #and_return(:key, :value) > > None worked. Is this a bug or am I misusing mocks? > > cr > _______________________________________________ > 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