2010-12-12 9 views
12

¿Cómo puedo probar que se utiliza un diseño específico en RSpec? He intentado template.layout, response.layout y response.should render_template ("layout") sin suerte.Diseño de prueba Rspec

Respuesta

17

En rspec 2, en una especificación de controlador, se utiliza render_template como usted adivinado, pero hay que incluir una ruta relativa al directorio de puntos de vista. Así que si su diseño es app/views/layouts/mylayout.html.erb, su especificación es el siguiente:

response.should render_template "layouts/mylayout" 
+0

Y cómo se prueba que no se utilizó ningún diseño. Supongamos que el controlador no 'render: layout => false', por ejemplo. ¿Cómo lo pruebas? –

1
# rspec-rails-1.3.x for rails-2 
describe HomeController do 
    describe "the home page" do 
    it "should use the :home_page layout" do 
     get :index 
     response.layout.should == "layouts/home_page" 
    end 
    end 
end 

# rspec-2 for rails-3 
describe "GET index" do 
    it "renders the page within the 'application' layout" do 
    get :index 
    response.should render_template 'layouts/application' # layout 
    response.should render_template 'index'    # view 
    end 
end 
+1

https://gist.github.com/11080d61648aaee51840 Estoy en rspec 2, rails 3. Obtengo una degradación con response.layout y los errores de template.layout sugeridos. –

+0

Actualicé mi respuesta en función de sus comentarios. –

5

Además, se puede probar tanto, el diseño y la prestación de acción, en una sola línea en rspec-2:

response.should render_template(%w(layouts/application name_of_controller/edit)) 
5

La sintaxis actualizado para RSpec 3:

expect(response).to render_template(:index) # view 
expect(response).to render_template(layout: :application) # layout 

RSpec docs

O si lo prefiere @Flov's one-liner, se puede escribir:

expect(response).to render_template(:index, layout: :application) 

en cuenta que render_template delegados a assert_template. Puede encontrar esos documentos aquí: ActionController assert_template.

+0

Solo una nota, esto ya no funciona y también la documentación está desactualizada. – Sebastialonso

Cuestiones relacionadas