Frage

Ich lerne RSpec 2 mit Rails 3. Um den Inhalt des Tags im Layout für jede Seite zu setzen, habe ich einen Helfer, der verwendet werden kann, um den Titel zu setzen und es dann wieder:

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

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

Der Helfer wird sowohl genannt aus dem Layout, wo sie den Titel zurückgibt, und die einzelnen Ansichten, wo sie den Titel setzt. Nun möchte ich Test in der Ansicht specs, dass der Titel richtig eingestellt wird. Da das Layout nicht gerendert wird, habe ich mich entschlossen page_title aus der spec anrufen und prüfen, ob der Rückgabewert ist, was ich erwarte, dass es sein. Allerdings bedeutet dies nicht, und immer nur zurückgibt „Site-Name“. Was soll ich tun?

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob dies ist, was Sie wollen, aber man konnte das Layout direkt testen:

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

Bearbeiten

Sie könnten auch Test, dass die page_title Methode wird in der Ansicht genannt:

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

oder Sie können einen Controller Test mit render_views verwenden:

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

Andere Tipps

, um den Titel einer Seite in einer Try spec Ansicht Um zu überprüfen:

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

Da machen wird außerhalb des Controllers genannt, muss es über das Layout, erzählt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top