Pregunta

Estoy aprendiendo RSpec 2 con rieles 3. Con el fin de establecer el contenido de la etiqueta en el diseño de cada página, tengo un ayudante que se puede utilizar para establecer el título y luego devolverlo:

def page_title(subtitle=nil)
  if @title.nil?
    @title = ["Site Name"]
  end

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

El ayudante se llama tanto del diseño, donde se devuelve el título y los puntos de vista individuales, donde se establece el título. Ahora, quiero poner a prueba en las especificaciones opinión de que el título se está configurado correctamente. Dado que la disposición no se representa, he decidido llamar page_title de la especificación y comprobar que el valor de retorno es lo que yo esperaba que fuera. Sin embargo, esto no funciona, y siempre sólo devuelve "Nombre del sitio". ¿Qué debo hacer?

¿Fue útil?

Solución

No estoy seguro si esto es lo que quería decir, pero se podría poner a prueba la disposición directa:

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

Editar

Usted podría también prueba que el método page_title se llama en la vista:

describe "mycontroller/index" do
  it "should set subtitle" do
    view.should_receive(:page_title).with("Subtitle")
    render
  end
end

o se puede utilizar una prueba de controlador con render_views:

describe Mycontroller do
  render_views
  it "sets the page title" do
    get :index
    response.body.should contain("Subtitle - Site Name")
  end
end

Otros consejos

Para comprobar el título de una página en una vista de especificaciones intento:

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

Debido a hacer que se llama fuera del controlador, es necesario que se le informe sobre el diseño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top