2007/10/1, Ryan Tucker <[EMAIL PROTECTED]>: > Jesper Laursen wrote: > > 2007/9/30, Ryan Tucker <[EMAIL PROTECTED]>: > > > >> Jesper Laursen wrote: > >> > >>> Hello forum > >>> > >>> I have there to files > >>> > >>> #----- 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 > >>> #---- > >>> > >>> and > >>> > >>> > >>> #----- 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 > >>> #----- > >>> > >>> 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 > >>> > >>> What can I do? > >>> _______________________________________________ > >>> rspec-users mailing list > >>> rspec-users@rubyforge.org > >>> http://rubyforge.org/mailman/listinfo/rspec-users > >>> > >>> > >> Correct me if I am wrong, but in the "before do" > >> > >> @virtual_hosts.should_receive(:find).and_return(@virtual_host) > >> > >> should be > >> > >> VirtualHosts.should_receive(:find).and_return(@virtual_host) > >> > >> Since you are calling find on the class? > >> > > > > If I change it to VirtualHost (an 's' there, give no sense), these > > errors raises: > > > > > > Spec::Mocks::MockExpectationError in 'VirtualHostsController handling > > GET /domains/1/virtual_hosts/1 should assign the found virtual_host > > for the view' > > Mock 'virtual_hosts' received unexpected message :find with ("1") > > > > Spec::Mocks::MockExpectationError in 'VirtualHostsController handling > > GET /domains/1/virtual_hosts/1 should find the virtual_host requested' > > Mock 'Class' expected :find with (any args) once, but received it 0 times > > > > Spec::Mocks::MockExpectationError in 'VirtualHostsController handling > > GET /domains/1/virtual_hosts/1 should render show template' > > Mock 'virtual_hosts' received unexpected message :find with ("1") > > > > Spec::Mocks::MockExpectationError in 'VirtualHostsController handling > > GET /domains/1/virtual_hosts/1 should be successful' > > Mock 'virtual_hosts' received unexpected message :find with ("1") > > > > So maybe you are a bit wrong :) > > I found this page, > > http://www.vaporbase.com/postings/Rspec_example_for_nested_resource_index_action, > > but unfortunately, does he not describe the same things as I am. > > _______________________________________________ > > rspec-users mailing list > > rspec-users@rubyforge.org > > http://rubyforge.org/mailman/listinfo/rspec-users > > > You are correct, it should be > > VirtualHost.should_receive(:find).and_return(@virtual_host) > > The first, third and fourth errors might be showing up because it should > be the same in the > > it "should find the virtual_host requested" > > > block as well. This is because the object called @virtual_hosts does > not have a method called "find" defined.
Okay, now it seems til work. The problem has what I have to place: @domain.virtual_hosts.should_receive(:find).with("1").and_return(@virtual_host) in the before, because the "do_get" method was using it, in all it-blocks. I just think that my before are pretty big. And I have to copy it for every describtion. But thanks a lot. It works OK. _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users