カテゴリー:
Rails
タグ:
 Rails Rspec view テスト

このエントリーをはてなブックマークに追加
更新日時:
2012年12月21日(金)
作成日時:
2012年12月21日(金)

前の記事 / 次の記事

RSpecでRailsのViewのテストを書く時の書き方を簡単にまとめ。

webratが入ってなかったら入れる。

$ vi Gemfile
gem webrat

$ bundle install

こんなソースがあったとして(ソースはhaml)

%h1.title @title
%p.desc description

%ol.items
  %li.item やくそう
  %li.item きめらのつばさ
  %li.item.selected ふくびきけん

全部で3つのアイテムがあって、
1つのアイテムだけが選択されているっていう要件があったとしたら、こう書ける。

$ vi spec/views/items/index.html_spec.rb

# coding: utf-8
require 'spec_helper'
describe "items/index.html.haml" do
  before do
    # インスタンス変数の割り当て
    assign(:title, "アイテム一覧")

    # スタブ
    view.stub(:detail).and_return("3つのアイテムを持っています。")

    # describe に記述したビューをレンダリングする
    render
  end

  it "アイテムは全部で3つある" do
    rendered.should have_selector("ol.items .item", :count => 3)
  end

  it "アイテムは1つだけ選択されている" do
    rendered.should have_selector("ol.items .item.selected", :count => 1)
  end

  context "assing と stub の使用例" do
    it "タイトルはアイテム一覧である" do
      rendered.should have_selector("h1") do |h1|
        h1.should contain "アイテム一覧"
      end
    end

    it "詳細は「3つのアイテムを持っています。」である" do
      rendered.should have_selector("p.detail") do |detail|
        detail.should contain "3つのアイテムを持っています。"
      end
    end
  end
end

この時、describe節の記述は重要で、render した時にここに書かれたビューがレンダリングされる。
describe節に記述したのとは別のビューを呼び出したい時は、パーシャルを書く要領で普通に呼び出せばいい。