I am new to mock objects, and I am trying to learn how to use them in RSpec. Can someone please post an example (a hello RSpec Mock object world type example), or a link (or any other reference) on how to use the RSpec mock object api?
Here's an example of a simple mock I did for a controller test in a rails application:
before(:each) do @page = mock_model(Page) @page.stub!(:path) @page.stub!(:find_by_id) @page_type = mock_model(PageType) @page_type.stub!(:name) @page.stub!(:page_type).and_return(@page_type) end
In this case, I'm mocking the Page & PageType models (Objects) as well as stubbing out a few of the methods I call.
This gives me the ability to run a tests like this:
it "should be successful" do Page.should_receive(:find_by_id).and_return(@page) get 'show', :id => 1 response.should be_success end
I know this answer is more rails specific, but I hope it helps you out a little.
Ok, so here is a hello world example...
Given the following script (hello.rb):
class Hello def say "hello world" end end
We can create the following spec (hello_spec.rb):
require 'rubygems' require 'spec' require File.dirname(__FILE__) + '/hello.rb' describe Hello do context "saying hello" do before(:each) do @hello = mock(Hello) @hello.stub!(:say).and_return("hello world") end it "#say should return hello world" do @hello.should_receive(:say).and_return("hello world") answer = @hello.say answer.should match("hello world") end end end