shoulda-matchersを使ってカスタムメッセージのバリデーションテストをするとき、書き方がわからなくて少し詰まったのでここに共有させて頂きます。
shoulda-matchersとは何ぞや?
shoulda-matchersというのは、通常のRSpecで書くと長くなるテストが簡潔にかけるようになるgemです。
例えば以下のようなバリデーションを持ったモデルがあったとします。
user.rb
class User < ApplicationRecord
validates :nickname, presence: true, length: { maximum: 30 }
end
このテストが以下のように一行でかけます。
spec/models/user_spec.rb
it { is_expected.to validate_length_of(:nickname).is_at_most(30) }
なかなかに便利ですね。
独自に設定したエラーメッセージをテストしたい場合
例えば以下のような、独自のエラーメッセージを持ったバリデーションを設定したとします。
user.rb
validates :email, presence: { message: 'が入っていません' }
バリデーションと同時に、独自のエラーメッセージが表示されているかということもチェックしたい場合
spec/models/user_spec.rb
it { should validate_presence_of(:email). with_message('が入っていません') }
このように書くことで独自のエラーメッセージとバリデーションを同時にチェックすることができます。
他にも使い方が色々あるので、気になる方はこちらを一読してみてください。
導入方法も書いてあります。
Shoulda-Matchers READ ME
最後まで読んでいただきありがとうございます!
日々学んだことをアプトプットしてます!なにかご指摘などあればコメントいただけますと嬉しいです!