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
>>> [email protected]
>>> 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
> [email protected]
> 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
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users