はじめに
Railsチュートリアルを進めている中でassert_templateとassert_selectの二つのメソッドについて一旦自分なりにまとめておきたいので記事にします。
assert_templateメソッドについて
レスポンスが正しいテンプレートとレイアウトを描画していることを検証する。
/users/new.html.erbが描画されているかどうかを検証する
assert_template 'users/new'
assert_templateについてまだあるようなのですが現時点では理解しずらいと感じたため今後追記します。
assert_selectメソッドについて
アクション実行の結果として描写されるHTMLの内容を検証する。
また、HTML要素内にキーが存在することを主張することで、 リクエストに対するレスポンスとなるビューの内容をテストする事が出来る。
assert_selectには2つの書式がある。
-
assert_select(セレクタ, [条件], [メッセージ])という書式は、セレクタで指定された要素が条件に一致することを主張する。セレクタにはCSSセレクタの式(文字列)や代入値を持つ式を使える。
-
assert_select(要素, セレクタ, [条件], [メッセージ]) は、選択されたすべての要素が条件に一致することを主張する。選択される要素は、element (Nokogiri::XML::Node or Nokogiri::XML::NodeSetのインスタンス) からその子孫要素までの範囲から選択される。
# title要素が存在するかどうか
assert_select 'title'
# title要素にこんにちはと存在するかどうか
assert_select 'title', "こんにちは"
# div要素にid="hello"が存在するかどうか
assert_select 'div#hello'
# div要素にclass="goodbye"が存在するかどうか
assert_select 'div.goodbye'
# header要素にid="head-wrapper"が2つあるのかどうか
assert_select 'header#head-wrapper', count:2
# 名前付きルート(例えば/login)へのリンクがあるのか
assert_select "a[href=?]", login_path
# 名前付きルート(例えば/login)へのリンクが0なのか
assert_select "a[href=?]", login_path, 0
# ネストした文法、h1タグの内側にある、gravatarクラス付きのimgタグがあるかどうか
assert_select 'h1>img.gravatar'
より詳しくテストするために、ネストしたassert_selectブロックを用いることもできます。
外側のassert_selectで選択しているul.headerとういう要素に対して、内側のassert_selectでli.headの文字列であるヘッダーがあるのかを検証する。
# ul.header内のli.headの文字列"ヘッダー"が存在するのか
assert_select "ul.header" do
assert_select 'li.head', "ヘッダー"
end
<!-- テストが通るビューファイル -->
<ul class=header>
<li class="top">トップ</li>
<li class="head">ヘッダー</li>
</ul>
assert_selectについてもまだあるみたいなのですがいまいち理解ができないのでRailsチュートリアルを進めながら理解できそうな時点で改めて記事を更新したいと思います。
#最後に
一時的にでも記事としてまとめることによって理解が深まると共に気分転換になりました。
間違いなどがあればご指摘などいただけると幸いです。