Wie teste ich den Titel einer Seite aus einer RSpec Ansicht spec?
-
25-09-2019 - |
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?
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.