2

Rails3でRSpec2を学習しています。各ページのレイアウトでタグの内容を設定するために、タイトルを設定して返すために使用できるヘルパーがあります。

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 に答える