Re: [rspec-users] Problems with testing nested routes using mocking

2007-10-02 Thread Geoffrey Wiseman
On 10/2/07, David Chelimsky [EMAIL PROTECTED] wrote:

 This is a known issue:


 http://rubyforge.org/tracker/index.php?func=detailaid=12963group_id=797atid=3149

 Patches welcome!


Not sure if that's related to the problem I'm having with view specs and the
dynamic path-generators, but it may be.  I tried to run the NetBeans
debugger on my spec, but as far as I can see, it can't introspect into the
generated code that routing.rb write_generation performs, which makes it
difficult to diagnose the problem.

I can dig into routing.rb:423 and the calls beneath it, but when I get to
routing.rb:424, step into just goes away and drops me off at a failed test.


Does anyone have suggestions for an alternate debugging technique, short of
modifying rails code, which is a little more intensive than I'd like right
now?  I don't mind trying to diagnose the problem and, if once diagnosed,
look into the effort of creating a patch, but at the moment, I don't even
know why my route generation's failing.

  - Geoffrey
-- 
Geoffrey Wiseman
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: [rspec-users] Problems with testing nested routes using mocking

2007-10-01 Thread Ryan Tucker
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.


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