Testing a render layout statement in a controller

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?

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

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. 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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs