assertとassert_notメゾット
- assert ➡︎ 引数 が trueなら成功、falseなら失敗となる
- assert_not ➡︎ 引数 が trueなら失敗、falseなら成功となる
valid?メゾット
valid? は、モデル(ActiveRecord)のメソッドで、バリデーションを実行して、モデルが正しい値かどうかを調べるものです。
バリデーションが通れば true 、通らなければ false を返します。
※そもそもvalidって何って人は、こちら 簡単に言えば、入力内容や記述内容が要件を満たしているか確認することです。
name属性のバリデーションに対するテスト
test/model/user_test.rb
test "name should be present" do
@user.name = " " #name属性に空欄をセット
assert_not @user.valid? #←バリデーションをまだ設定していないので、どんな値でも true で返ってくる。
end #つまり、assert_not メソッドでエラーが起きる
@userの値が空欄になっています。
もし presence のバリデーションが有効ならば @user.valid?は false を返すため、
assert_notが成功となりエラーは起きません。
しかし presence のバリデーションが無効(もしくは未設定)の場合は、たとえ@user.nameが空欄であろうとなかろうと、
valid?メソッドは true を返すため、assert_not が失敗となります。
なので、ここではエラーです。
成功させるために、validates メソッドに presence: true という引数を与えます。
name属性のバリデーションを検証する
app/models~user.rb
class User < ApplicationRecord
validates :name, presence: true
end
これでテストがパスします。
railsではこのようにバリデーションの有効性をテストしています。