2010-10-22 20 views
2

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:Comment tester le titre d'une page à partir d'une spécification de vue RSpec?

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 à partir de la mise en page, où elle renvoie le titre, et des vues individuelles, où elle définit le titre. Maintenant, je veux tester dans les spécifications de vue que le titre est réglé correctement. Comme la mise en page n'est pas rendue, j'ai décidé d'appeler page_title à partir de la spécification et de vérifier que la valeur de retour correspond à ce que j'attends. Cependant, cela ne fonctionne pas, et renvoie toujours simplement "Nom du site". Que devrais-je faire?

Répondre

1

Je ne suis pas sûr que ce soit 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 tester également 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 
+0

Merci, mais ce n'est pas ce que je cherchais. J'essaie de tester que la vue définit correctement le titre (en appelant page_title) en vérifiant la sortie de page_title à ce que je veux que cette page retourne. Comme, ce serait différent pour chaque vue. – hatkirby

+0

voir ma modification - cette aide? – zetetic

+0

Eh bien, ce n'était pas ce que je recherchais à l'origine, mais j'ai décidé de le tester à partir des spécifications du contrôleur. Merci! – hatkirby

2

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 

render Parce qu'on a appelé en dehors du contrôleur, il doit être dit au sujet de la mise en page.