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

Reply via email to