2010-10-22 1 views
2

Я учусь RSpec 2 с Rails 3. Для того, чтобы установить содержимое тега в макете для каждой страницы, у меня есть помощник, который может быть использован для установки заголовка, а затем вернуть его:Как проверить название страницы из спецификации вида 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 

EDIT

Вы можете также проверить, что метод 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

+0

см. Мое редактирование - эта помощь? – zetetic

+0

Ну, это было не то, что я изначально искал, но я решил просто протестировать его из спецификации контроллера. Благодаря! – hatkirby

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 

Поскольку рендер вызывается вне контроллера, то нужно сказать о макете.