Ran into a tricky situation the other day trying mock out an enumerable object. I was trying to test a list of a files inside a Zip. However, I couldn't figure out how to yield a list of mocked ZipFile objects without monkey patching something inside Rubyzip which didn't seem very attractive at the time.... Instead I decided to simply stub! the :each method and create a helper
def mock_out_enumerable_each(*files) block = lambda {|block| files.each{|n| block.call(n)}} @zip.stub!(:each).and_return(&block) end
This works rather nicely,
one = mock('one', :name => "assets/file1.jpg") two = mock('two', :name => "assets/file2.png") three = mock('three', :name => "assets/file3.gif") four = mock('four', :name => "assets/file4.gif") stub_out_enumerable_each one,two,three,four