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
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"
# 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
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. –
J'ai mis à jour ma réponse en fonction de vos commentaires. –
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))
La syntaxe mise à jour pour RSpec 3:
expect(response).to render_template(:index) # view
expect(response).to render_template(layout: :application) # layout
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.
Juste une note, cela ne fonctionne plus et aussi la documentation est sauvagement démodée. – Sebastialonso
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? –