はじめに
Ruby on RailsでWebアプリ開発をするためにRails Tutorialを学習中(現在は9章の途中)です。"超初心者"ですので間違ったところなどございましたらご指摘をよろしくお願いします。
テストが何やってるかよくわからん
Rails Tutorialのテスト文を書いていて「分かったような気がしてきた」テスト内の一文をちゃんと整理しようと思いました。実際に自分で独自アプリを作ったときにテストが書けるようにするためのメモです。
・validates
こいつが初めて登場したのは、6.22 存在性を検証する です。
使いどころは、
class User < ApplicationRecord
validates :name, presence: true
end
でname属性の存在性を検証するとあります。
このページでの説明は
validates メソッドにpresence: trueという引数を与えて使うことです。presence: trueという引数は、要素が1つのオプションハッシュです。4.3.4のようにメソッドの最後の引数としてハッシュを渡す場合、波カッコを付けなくても問題ありません。
validates
っていうのは何だ...?
ついでにpresence: true
の使い方もわからん...
まずは英語単語の意味から調べる!!
- validates : 検証する
- presence : 存在
この時点で大体察して、
要するに指定したシンボルが空でないならテストを通るという感じ。
つまり
validates シンボル 検証項目
という使い方のようです。
・assert_select
こいつの登場は3.4.1 タイトルをテストする (Red)です。
この説明は
このテストで使っているassert_selectメソッドでは、特定のHTMLタグが存在するかどうかをテストします (この種のアサーションメソッドはその名から「セレクタ」と呼ばれることもあります)。
タグ内に「Home | Ruby on Rails Tutorial Sample App」という文字列があるかどうかをチェックします。
assert_select "title", "Home | Ruby on Rails Tutorial Sample App"
上のセレクタは、
これは説明を読めば分かりますが、
assert_select "HTMLタグ" , "対象文字列"
と書くことでHTMLタグ内に対象文字列があればテストを通るようです。
また5章では
assert_select "a[href=?]", root_path, count: 2
のような使い方もしています
これはhrefの遷移先がroot_pathである項目が2つあるということです。
まとめ
- validation
validates シンボル 検証項目
指定シンボルが検証項目を満たしていたらテストを通る。
- assert_alert :
assert_select "HTMLタグ" , "対象文字列"
HTMLタグ内に対象文字列があればテストを通る。
参考
Railsバリデーションまとめ
https://qiita.com/shunhikita/items/772b81a1cc066e67930e#%E5%8F%82%E8%80%83
Active Record バリデーション
https://railsguides.jp/active_record_validations.html
assert_selectの使い方
http://d.hatena.ne.jp/zariganitosh/20080405/1207455670