[rspec-users] render_to_string confusing ControllerSpec

Andrew Selder aselder at mac.com
Mon Jun 16 22:19:14 EDT 2008


I updated the spec to look like this:

     it "should render show template" do
       do_get
       controller.stub_render(:partial => "/properties/ 
map_info_box", :object => anything())
       response.should render_template('show')
     end

and I still get the same failure and back trace.

In addition to not working, the problem with stubbing out that render  
to string is that I can't then check for the presence of those strings  
in the final output.

Thanks,

Andrew

On Jun 16, 2008, at 10:03 PM, David Chelimsky wrote:

> On Jun 16, 2008, at 8:59 PM, Andrew Selder wrote:
>
>> Here's the back trace
>>
>> 1)
>> 'SearchesController handling GET /searches/1 should render show  
>> template' FAILED
>> expected "show", got "properties/_map_info_box"
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> expectations.rb:52:in `fail_with'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> expectations/handler.rb:25:in `handle_matcher'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> expectations/extensions/object.rb:31:in `should'
>> ./spec/controllers/searches_controller_spec.rb:26:
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_methods.rb:84:in `instance_eval'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_methods.rb:84:in `run_with_description_capturing'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_methods.rb:21:in `execute'
>> /opt/local/lib/ruby/1.8/timeout.rb:48:in `timeout'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_methods.rb:18:in `execute'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_group_methods.rb:303:in `execute_examples'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_group_methods.rb:302:in `each'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_group_methods.rb:302:in `execute_examples'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> example/example_group_methods.rb:130:in `run'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> runner/example_group_runner.rb:22:in `run'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> runner/example_group_runner.rb:21:in `each'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> runner/example_group_runner.rb:21:in `run'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> runner/options.rb:106:in `run_examples'
>> /Users/aselder/BostonLogic/one_system/vendor/plugins/rspec/lib/spec/ 
>> runner/command_line.rb:19:in `run'
>> script/spec:4:
>>
>> And here's the controller action:
>>
>> def show
>>   @search = Search.find(params[:id])
>>   if @search.too_many_results?
>>     message_to_new "Your search returned too many results (#{@search.count 
>> }). Please narrow your criteria and search again."
>>     return
>>   elsif @search.no_results?
>>     message_to_new "Your search returned no results. Please change  
>> your criteria and search again."
>>     return
>>   end
>>   init_map
>>   @props = @search.do_search
>>   @markers = []
>>   @props.each do |prop|
>>     coords = prop.latlng
>>     unless coords.lat == 0 || coords.lng == 0
>>       prop.info_box = render_to_string(:partial => "/properties/ 
>> map_info_box", :object => prop)
>
> This is the line that's causing you trouble. Try stubbing this one  
> out as well:
>
> response.stub_render(:partial => "/properties/map_info_box", :object  
> => anything())
>
> Let us know if it works.
>
> Cheers,
> David
>
>>
>>       mark = prop.has_photos? ? "green" : "red"
>>       marker = GMarker.new(coords, :title =>  
>> prop_help.bubble_header(prop), :info_window => prop.info_box, :icon  
>> => Variable.new(mark))
>>       @map.overlay_init marker
>>       @markers << marker
>>     end
>>   end
>>   unless @markers.empty?
>>     @map.center_zoom_on_points_init(*(@markers.collect {|x|  
>> x.point}))
>>   else
>>     @map.center_zoom_init(@search.center, 12)
>>   end
>> end
>>
>> Thanks,
>>
>> Andrew
>>
>> On Jun 16, 2008, at 9:34 PM, David Chelimsky wrote:
>>
>>> On Jun 16, 2008, at 2:58 PM, Andrew Selder wrote:
>>>
>>>> Hi all,
>>>>
>>>> I have a controller I'm trying to spec out, and I'm running into  
>>>> some issues with render_to_string.
>>>>
>>>> Basically, the show gets an array of objects, calls  
>>>> render_to_string for each of them, and then renders the show  
>>>> template.
>>>>
>>>> So I have the standard spec:
>>>>
>>>>
>>>> it "should render show template" do
>>>>   do_get
>>>>   response.should render_template('show')
>>>> end
>>>>
>>>>
>>>> but when I run the spec I get the following failure:
>>>>
>>>> 'SearchesController handling GET /searches/1 should render show  
>>>> template' FAILED
>>>> expected "show", got "properties/_map_info_box"
>>>>
>>>>
>>>> Does anybody have any ideas?
>>>
>>> Please post the controller action and the full backtrace:
>>>
>>> script/spec spec/controller/path/to/the/spec.rb -fsb
>>>
>>> Thx
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list