On Jul 14, 2009, at 10:59 PM, Zhenning Guan wrote:


class PeepCode

def awesome
  "awesome"
end

end

describe PeepCode do

it "should fuck" do
peep = PeepCode.new
peep.should_receive(:awesome).and_return("awesome")
peep.awesome #this completes the expectation above
#  PeepCode.new.should_receive(:awesome).and_return("awesome")
end
end


-----------------------------------------
Spec::Mocks::MockExpectationError in 'PeepCode should fuck'
#<PeepCode:0xb7aa3bbc> expected :awesome with (any args) once, but
received it 0 times
./simple_spec.rb:13:

Finished in 0.006159 seconds

1 example, 1 failure

------------------------------------------


what's wrong with my code?

I think you misunderstand "should_receive". It doesn't actually call the method you're describing; it creates an expectation. So your spec says that something should happen, and then you never called the method, so it "received it 0 times"

This is a bad example though.

Your code seems to say that this is the spec:

describe PeepCode, "awesome" do
 it "should return the string 'awesome'" do
   PeepCode.new.awesome.should == 'awesome'
 end
end

"should_receive" says that in the test which is being run, the object should receive that method call... for example:

class PeepCode
 def awesome
   totally_rad
 end
 def totally_rad
   "righteous"
 end
end

and your spec:

describe PeepCode, "awesome" do
 it "should call the totally_rad method" do
   peep = PeepCode.new
   peep.should_receive(:totally_rad).and_return(...whatever...)
   peep.awesome
 end
 it "should return the string 'righteous'" do
   PeepCode.new.awesome.should == 'righteous'
 end
end

I haven't tried any of that, but it should work.


Jim Gay
http://www.saturnflyer.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to