Railsチュートリアル第7章(第6版)-7.3.4.1 演習- でエラーメッセージに対するテストコードの意味が分からず書けなかったので、この機会に復習した。
-エラーメッセージをテストするためのテンプレート-
assert_select 'div#<CSS id for error explanation>'
assert_select 'div.<CSS class for field with error>'
#①assert_selectメソッド
assert_selectメソッドは様々な指定方法がある。このことがすっかり頭から抜け落ちていたので第5章に戻って再確認。
Code | マッチするHTML |
---|---|
assert_select "div" | <div>foobar</div> |
assert_select "div", "foobar" | <div>foobar</div> |
assert_select "div.nav" | <div class="nav">foobar</div> |
assert_select "div#profile" | <div id="profile">foobar</div> |
assert_select "div[name=yo]" | <div name="yo">hey</div> |
assert_select "a[href=?]", '/', count: 1 | <a href="/">foo</a> |
assert_select "a[href=?]", '/', text: "foo" | <a href="/">foo</a> |
assert_select "div.ほげほげ"はclass属性、
assert_select "div#ふがふが"はid属性をマッチさせることが出来る。
#②パーシャル(partial)
今回のエラーメッセージはユーザー登録失敗時に出力される。
ユーザー登録のViewにおいてエラーメッセージのパーシャルを出力するようにしている。
<%= render 'shared/error_messages' %>
ここでは、'shared/error_messages'というパーシャルをrender(描画)している。
render
はRailsヘルパー。
-フォーム送信時にエラーメッセージを表示するためのパーシャル-
<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
つまりエラーメッセージが出力されたときにマッチするのは、
assert_select "div.alert"
assert_select "div#error_explanation" である。
#まとめ
第5章を復習することで、エラーメッセージに対するテストが書けた。