Pergunta

Estou aprendendo RSPEC 2 com Rails 3. Para definir o conteúdo da tag no layout para cada página, tenho um ajudante que pode ser usado para definir o título e depois devolvê -lo:

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

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

O ajudante é chamado do layout, onde retorna o título e as visualizações individuais, onde define o título. Agora, quero testar as especificações de visualização de que o título está sendo definido corretamente. Como o layout não é renderizado, decidi ligar para Page_title da especificação e verificar se o valor de retorno é o que eu espero que seja. No entanto, isso não funciona e sempre retorna "nome do site". O que devo fazer?

Foi útil?

Solução

Não tenho certeza se é isso que você quis dizer, mas você pode testar o layout diretamente:

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

Você também pode testar que o page_title O método é chamado na vista:

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

ou você pode usar um teste de controlador com render_views:

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

Outras dicas

Para verificar o título de uma página em uma especificação de visualização, tente:

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

Como a renderização está sendo chamada fora do controlador, ele precisa ser informado sobre o layout.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top