2

我正在用 Rails 3 学习 RSpec 2。为了在每个页面的布局中设置标签的内容,我有一个助手可以用来设置标题然后返回它:

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

  unless subtitle.nil?
    @title << subtitle
  end

  @title.reverse.join " - "
end

帮助器从布局(返回标题)和单个视图(设置标题)中调用。现在,我想在视图规范中测试标题设置是否正确。由于没有呈现布局,我决定从规范中调用 page_title 并检查返回值是否符合我的预期。但是,这不起作用,并且总是只返回“站点名称”。我该怎么办?

4

2 回答 2

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

因为渲染是在控制器外部调用的,所以需要告诉它布局。

于 2012-12-25T12:48:29.653 回答
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
于 2010-10-23T22:05:08.117 回答