Как проверить заголовок страницы из спецификации представления RSpec? - PullRequest
2 голосов
/ 23 октября 2010

Я изучаю RSpec 2 с Rails 3. Чтобы установить содержимое тега в макете для каждой страницы, у меня есть помощник, который можно использовать для установки заголовка и его возврата:

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

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

Помощник вызывается как из макета, где он возвращает заголовок, так и из отдельных представлений, где он устанавливает заголовок.Теперь я хочу проверить в спецификации вида, что заголовок установлен правильно.Поскольку макет не отображается, я решил вызвать page_title из спецификации и проверить, что возвращаемое значение соответствует ожидаемому.Тем не менее, это не работает, и всегда просто возвращает «Имя сайта».Что мне делать?

Ответы [ 2 ]

2 голосов
/ 25 декабря 2012

Чтобы проверить заголовок страницы в спецификации представления, попробуйте:

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

Поскольку рендеринг вызывается вне контроллера, необходимо сообщить о макете.

1 голос
/ 24 октября 2010

Я не уверен, что это именно то, что вы имели в виду, но вы можете проверить макет напрямую:

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
...