Actually, this is evidently not the whole story. I actually have two examples in the same spec, and I just realized that the other one has instances of file.should_receive(:puts) that don't seem to suffer the same limitation I described. So it looks like there is something about the example I described that is causing it to behave strangely. Will investigate further.

Mark.



Mark Thomson wrote:
I'm writing my first controller spec - for a controller that already exists, and in the process have observed some behavior I find a little surprising. I'd like to know whether I'm interpreting the situation correctly...

In my controller I have some stuff written to a file, i.e.

file = File.new(...)
...
file.puts "a string"
...
file.puts "another string"

etc


In my spec I mock the file object -

file = mock('file')
File.stub!(:new).and_return(file)

and then check that the expected messages are being received -

file.should_receive(:puts).with("a string").once
file.should_receive(:puts).with("another string").once

etc.


Here's what I'm puzzled about. If I don't include the expectation for the first string in the spec, the spec will fail the expectation for the second string. It seems as if "should_receive" is queuing up the messages that come into the file object and when it tests an expectation it just looks at the next one in line. If it doesn't match then the expectation will fail.

Is that really what happens? Or have I missed some important insight? Seems counterintuitive to me. What is strange is that I was working away on this yesterday and just picking out a number of particular puts to test that I was concerned about. It seemed to be working the way I expected it to. Then late yesterday I started seeing some spec failures I didn't understand and my investigation led me to the conclusion above.

Interested to know if what I think I'm seeing is consistent with other people's experience and with the intended behavior of mocks.

Mark.

_______________________________________________
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