2010-12-12 82 views
12

Comment tester qu'une mise en page spécifique est utilisée dans RSpec? J'ai essayé template.layout, response.layout et response.should render_template ("layout") sans chance.Mise en page de test Rspec

Répondre

17

Dans rspec 2, dans une spécification de contrôleur, vous utilisez render_template comme vous l'aurez deviné, mais vous devez inclure un chemin relatif au répertoire de vues. Donc, si votre mise en page est app/views/layouts/mylayout.html.erb, vos spécifications ressemble à ceci:

response.should render_template "layouts/mylayout" 
+0

Et comment testez-vous qu'aucune disposition n'a été utilisée. Supposons que le contrôleur fait 'render: layout => false' par exemple. Comment le testez-vous? –

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 Je suis sur rspec 2, rails 3. J'obtiens une obsolète avec response.layout et les erreurs template.layout suggérées. –

+0

J'ai mis à jour ma réponse en fonction de vos commentaires. –

5

Vous pouvez également tester à la fois, la mise en page et le rendu d'action, dans un one-liner en rspec-2:

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

La syntaxe mise à jour pour RSpec 3:

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

RSpec docs

Ou si vous préférez @Flov's one-liner, vous pouvez écrire:

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

Notez que render_template délégués à assert_template. Vous pouvez trouver ces documents ici: ActionController assert_template.

+0

Juste une note, cela ne fonctionne plus et aussi la documentation est sauvagement démodée. – Sebastialonso