Forum: RSpec testing a render layout statement in a controller

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Dave Gamphani Phiri (Guest)
on 2008-10-16 10:51
(Received via mailing list)
Attachment: davegamphaniphiri.vcf (0 Bytes)
I am new to rSpec and I am writing a test for a controller which has
already been developed

This is the example in my reports_controller_spec.rb:

it "should render the layouts/menu template" do
    get :select_missing_persons
    response.should render_template("layouts/menu")
  end

and this is the method in the reports_controller.rb

 def select_missing_identifiers
    render(:layout => "layouts/menu")
  end

I am getting the following output when running autotest:

'ReportsController should render the layouts/menu template' FAILED
expected "layouts/menu", got "reports/select_missing_persons"
./spec/controllers/reports_controller_spec.rb:39:
script/spec:4:

Here, I was trying to test if the out put displays with a layouts/menu
template.
Can somebody help on how you test the render(:layout => "layouts/
menu") statement in a controller or this is supposed to be tested in
the view?
wei wei (Guest)
on 2008-10-16 10:57
(Received via mailing list)
Try to write a customized matcher, here is an example

# custom matchers

#---------------------

class UseLayout

  def initialize(expected)

    @expected = 'layouts/' + expected + '_layout'

  end

  def matches?(controller)

    @actual = controller.layout

    #@actual.equal?(@expected)

    @actual == @expected

  end

  def failure_message

    return "use_layout expected #{@expected.inspect}, got
#{@actual.inspect}", @expected, @actual

  end

  def negative_failure_message

    return "use_layout expected #{@expected.inspect} not to equal
#{@actual.inspect}", @expected, @actual

  end

end


def use_layout(expected)

  UseLayout.new(expected)

end


On Thu, Oct 16, 2008 at 2:50 PM, Dave Gamphani Phiri <
Bart Z. (Guest)
on 2008-10-20 15:38
(Received via mailing list)
On 16-okt-2008, at 8:50, Dave Gamphani Phiri wrote:

> Here, I was trying to test if the out put displays with a layouts/menu
> template.
> Can somebody help on how you test the render(:layout => "layouts/
> menu") statement in a controller or this is supposed to be tested in
> the view?

Try this:

render(:layout => "layouts/menu") and return

cheers,
bartz
Harry B. (Guest)
on 2008-10-31 19:26
Bart Z. wrote:
> On 16-okt-2008, at 8:50, Dave Gamphani Phiri wrote:
>
>> Here, I was trying to test if the out put displays with a layouts/menu
>> template.
>> Can somebody help on how you test the render(:layout => "layouts/
>> menu") statement in a controller or this is supposed to be tested in
>> the view?
>
> Try this:
>
> render(:layout => "layouts/menu") and return
>
> cheers,
> bartz

Thanks Bartz, I used your input to try a controller line of
    format.html { render :action => "show" }
and rspec of
    response.should render_template( :(controller name) => "/show")

I tried it with and without the "and return" and both worked.

Harry
This topic is locked and can not be replied to.