Comment puis-je tester le titre d'une page à partir d'une spécification de vue RSpec?
-
25-09-2019 - |
Question
J'apprends RSpec 2 avec Rails 3. Pour définir le contenu de la balise dans la mise en page pour chaque page, j'ai une aide qui peut être utilisé pour définir le titre, puis le retourner:
def page_title(subtitle=nil)
if @title.nil?
@title = ["Site Name"]
end
unless subtitle.nil?
@title << subtitle
end
@title.reverse.join " - "
end
L'aide est appelée à la fois la mise en page, où il retourne le titre, et les vues individuelles, où il définit le titre. Maintenant, je veux tester dans les spécifications de vue que le titre est correctement réglée. Depuis la mise en page n'est pas rendu, j'ai décidé d'appeler page_title de la spécification et vérifiez que la valeur de retour est ce que je pense que ce soit. Cependant, cela ne fonctionne pas, et toujours juste retour « Nom du site ». Que dois-je faire?
La solution
Je ne sais pas si c'est ce que vous vouliez dire, mais vous pouvez tester directement la mise en page:
require 'spec_helper'
include ApplicationHelper
describe "layouts/application" do
it "should add subtitle to page title" do
page_title("Subtitle")
render
rendered.should have_selector('title:contains("Subtitle - Site Name")')
end
end
EDIT
Vous pouvez également vérifier que la méthode page_title
est appelée dans la vue:
describe "mycontroller/index" do
it "should set subtitle" do
view.should_receive(:page_title).with("Subtitle")
render
end
end
ou vous pouvez utiliser un test de contrôleur avec render_views
:
describe Mycontroller do
render_views
it "sets the page title" do
get :index
response.body.should contain("Subtitle - Site Name")
end
end
Autres conseils
Pour vérifier le titre d'une page dans un essai de spécification de la vue:
require "spec_helper"
describe "controller/view.html.erb" do
it "renders page title with 'Title | MySite'" do
render template: "controller/view", layout: "layouts/application"
rendered.should have_selector("title", text: "Title | MySite")
end
end
Parce que rendre est d'être appelé en dehors du contrôleur, il doit être dit au sujet de la mise en page.