Pat Maddox wrote:
Can you please post an example of the spec and production code that
isn't behaving as you expect?

Pat

Sure, sorry been tied up with business travel this week. Here's my controller...


----
class SubscribersController < ApplicationController

 def test

   file = File.new("test.txt", "w")
file.puts "one"
   file.puts "two"
   file.puts "three"
   file.puts "four"
   file.puts "five"
   file.puts "six"

   render :action => "index"

 end

end

-----

and a spec containing two examples that illustrate what I was talking about -


-----

describe SubscribersController do

   it "does not pass" do
file = mock('file')
       File.stub!(:new).and_return(file)
file.should_receive(:puts).with("one")
       file.should_receive(:puts).with("two")
       file.should_receive(:puts).with("six")
get 'test' end
   it "does pass" do
file = mock('file')
       File.stub!(:new).and_return(file)
file.should_receive(:puts).with("one")
       file.should_receive(:puts).with("two")
       file.should_receive(:puts).with("six")
       file.should_not_receive(:puts).with("ten")
get 'test' end

end

----

The first example fails with error message "Mock 'file' expected :puts with ("one") but received it with ("three")" (The message seems a little strange since "one" is clearly received, but I can live with that. I understand the point Steve made that a mock should have all messages specified in expectations).

The second example passes fine, which is the thing I still find surprising. It seems as if "should_not_receive" doesn't just match the absence of the specified message but also the presence of any message other than the specified message.

Mark.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to