Domanda

Sto imparando RSpec 2 con Rails 3. Al fine di impostare il contenuto del tag nel layout per ogni pagina, ho un aiutante che può essere utilizzato per impostare il titolo e poi tornare:

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

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

L'helper viene chiamato da entrambi il layout, in cui ritorna il titolo, e le singole viste, dove si imposta il titolo. Ora, voglio prova nelle specifiche vista che il titolo è stato impostato correttamente. Dal momento che il layout non è reso, ho deciso di chiamare page_title dal spec e verificare che il valore di ritorno è quello che mi aspettavo che fosse. Tuttavia, questo non funziona, e sempre e solo restituisce "Nome del sito". Cosa devo fare?

È stato utile?

Soluzione

Non sono sicuro se questo è quello che volevi dire, ma si potrebbe provare direttamente il layout:

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

Modifica

Si potrebbe anche prova che il metodo page_title viene chiamato nella vista:

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

o si potrebbe utilizzare un test di controllo 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

Altri suggerimenti

Per controllare il titolo di una pagina in una vista specifica prova:

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

A causa di rendering viene chiamato al di fuori del controllo, ha bisogno di essere raccontato il layout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top