Topic: [rSpec] Problems with testing nested routes using mocking

Hello forum

I have there to files
[code=virtual_host_controller.rb]
class VirtualHostsController < ApplicationController
  before_filter :capture_domain
 
  # GET /domain/1/virtual_hosts/1
  def show
    @virtual_host = @domain.virtual_hosts.find(params[:id])

    respond_to do |format|
      format.html # show.rhtml
    end
  end

  private
 
  def capture_domain
    if params[:domain_id].blank?
      flash[:notice] = 'Need domain.'
      redirect_to domains_url
    else
      @domain = Domain.find(params[:domain_id])
    end
  end
end[/code]
and
[code=virtual_host_controller_spec.rb]
describe VirtualHostsController, "handling GET /domains/1/virtual_hosts/1" do

   before do
     @domain = mock_model(Domain)
     @virtual_hosts = mock("virtual_hosts")
     @virtual_host = mock("virtual_host")     
     Domain.should_receive(:find).with("1").and_return(@domain)   
     @domain.should_receive(:virtual_hosts).and_return(@virtual_hosts)
     @virtual_hosts.should_receive(:find).and_return(@virtual_host)
     login_as :admin
   end

   def do_get
     get :show, :id => "1", :domain_id => "1"
   end

  it "should render show template" do
    do_get
    response.should render_template('show')
  end
 
   it "should find the virtual_host requested" do
#     @domain.should_receive(:virtual_hosts).and_return(@virtual_hosts)     
     @virtual_hosts.should_receive(:find).with('1').and_return(@virtual_host)
     do_get
   end
 
  it "should assign the found virtual_host for the view" do
    do_get
    assigns[:virtual_host].should equal(@virtual_host)
  end[/code]
I have a problem with these three it should-cases. How can I make them to work.

The error is:

should find the virtual_host requested
Mock 'virtual_hosts' expected :find with ("1") once, but received it 0 times

The routes are like this:
  map.resources :domains do |domains|
    domains.resources :virtual_hosts
  end

Re: [rSpec] Problems with testing nested routes using mocking

Did you figure this out?

I've just applied rspec to a project and these scenarios are the last few headches to a green sheet.

I have found this reference for nested but it's not as you or I have things setup.

http://www.vaporbase.com/postings/Rspec … dex_action

But it might be enough if I knew more rpsec/moch/stub wink