#はじめに
今回はModelのvalidationを対象にRspecを書きます
・name,email,passwordがあれば有効である事
・name,email,passwordが無ければ無効である事
以上の2点をテストしたいと思います。
#1. テスト対象
validates :name,
presence: true,
validates :email,
presence: true,
validates :password,
presence: true,
テスト対象はUser登録時のvalidationを対象にします。
今回はvalidationの有効性のみ検証したいので、上記の様に簡素なコードとします。
#2.実装
require 'rails_helper'
Rspec.decribe User, type: model do
describe '#validates' do
context '名前、メアド、パスワードが正しければ' do
it '有効である事' do
@user = User.new ({
name: "テスト太郎",
email: "xxx@yyy.jp",
password: "111111",
})
expect(@user).to be_valid
end
end
context '名前、メアド、パスワードが正しくなければ' do
it 'validateされる事' do
@user = User.new ({
name: "",
email: "",
password: "",
})
expect(@user.valid?).to be_falsy
end
end
end
end
インスタンス変数にそれぞれ正しいオブジェクトと正しくないオブジェクトを代入します。
validationgが有効であるかテストする為にbe_valid(プレディカットマッチャ)を使い、反対に有効では無い時はfalseが返ってくる事を確認する為にbe_falsyを使っています。
*オブジェクトを作る時のnewメソッド直後の波括弧はvalue,括弧はkeyそれぞれに与えてあげないといけない見たいです。個人的にちょっと嵌りました。
#3.テスト結果
2 examples, 0 failures
通りましたね。
validation対象のRspecはシンプルな記述ができるので理解し易いと感じました。
#最後に
今回はまとめて実装して見ましたが本来各カラム毎にテストを走らせる必要があると思います。
それとコード叩いてて思ったのは自分自身、各括弧 (){}[] をそれぞれ感覚で使っていたので改めて理解する必要があるなと感じました。また記事にしたいと思います。
ps→
日本うなぎの稚魚はオーストラリアから海流に乗ってやってくるらしい。