どのように私はRSpecのビュー仕様からページのタイトルをテストするのですか?

StackOverflow https://stackoverflow.com/questions/4001222

質問

私は、各ページのレイアウトにタグの内容を設定するためには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を呼び出し、戻り値は、私はそれがあることを期待するものであることを確認することにしました。しかし、これは動作しませんし、常にちょうど「サイト名」を返します。私が何をすべきか?

役に立ちましたか?

解決

これはあなたが何を意味するのかである場合、私はわからないんだけど、あなたは直接レイアウトをテストすることができます:

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

他のヒント

ビュースペック試しにページのタイトルを確認するには:

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
レンダリングは、コントローラの外部に呼び出されているので、

、それはレイアウトについて指示する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top