LoginSignup
3
1

More than 5 years have passed since last update.

【Ruby on Rails チュートリアル】疑問その1 - テスト実行内容を辿る

Last updated at Posted at 2018-06-19

はじめに

Ruby on RailsでWebアプリ開発をするためにRails Tutorialを学習中(現在は9章の途中)です。"超初心者"ですので間違ったところなどございましたらご指摘をよろしくお願いします。

テストが何やってるかよくわからん

Rails Tutorialのテスト文を書いていて「分かったような気がしてきた」テスト内の一文をちゃんと整理しようと思いました。実際に自分で独自アプリを作ったときにテストが書けるようにするためのメモです。

・validates

こいつが初めて登場したのは、6.22 存在性を検証する です。
使いどころは、

app/models/user.rb
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タグが存在するかどうかをテストします (この種のアサーションメソッドはその名から「セレクタ」と呼ばれることもあります)。

assert_select "title", "Home | Ruby on Rails Tutorial Sample App"

上のセレクタは、

タグ内に「Home | Ruby on Rails Tutorial Sample App」という文字列があるかどうかをチェックします。

これは説明を読めば分かりますが、

assert_select "HTMLタグ" , "対象文字列"

と書くことでHTMLタグ内に対象文字列があればテストを通るようです。

また5章では

test/integration/site_layout_test.rb
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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1