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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top