2010-10-22 75 views
2

我使用Rails 3學習RSpec的2爲了設置標籤的內容在佈局的每一頁,我有可以用來設置標題,然後在助手返回它:如何從RSpec視圖規範測試頁面的標題?

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

    unless subtitle.nil? 
    @title << subtitle 
    end 

    @title.reverse.join " - " 
end 

幫助器從佈局中返回標題,然後在各個視圖中調用標題。現在,我想在視圖規範中測試標題設置是否正確。由於佈局未呈現,因此我決定從規範中調用page_title,並檢查返回值是否與我期望的相同。但是,這不起作用,並且總是返回「站點名稱」。我該怎麼辦?

回答

1

我不知道,如果這是你的意思,但你可以直接測試的佈局:

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 

編輯

您也測試了page_title方法被調用的觀點:

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

,或者你可以使用一個控制器測試與render_views

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

謝謝,但那不是我想要的。我試圖通過檢查page_title的輸出結果來確定該視圖是否正確地設置了標題(通過調用page_title)來使頁面返回。就像,每個視圖都會有所不同。 – hatkirby 2010-10-23 23:10:57

+0

看到我的編輯 - 幫助? – zetetic 2010-10-24 02:56:16

+0

那麼,這不是我最初尋找的東西,但我決定從控制器規格中進行測試。謝謝! – hatkirby 2010-10-24 11:56:23

2

要檢查在視圖中規範嘗試頁面的標題:

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 

因爲渲染被稱爲控制器之外,它需要被告知佈局。