悩んでいること
allow_any_instance_ofが非推奨であるという事は良く分かりました。
なのでallow_any_instance_of ではなく subject のスタブで書いて解決したいと思いましたが、どう書けば良いのか分かりません。
私の書いたRspecとそのテストの元となるモデルのプログラム
#model.rb class Hoge < ApplicationRecord validates :secret, presence: true, length: { is: 20 } before_validation :set_num, on: :create, unless: :number private def set_num self.number = SecureRandom.hex(10) end end
そして、私はこのbefore_validationをallow_any_instance_ofを使ってテストしました。
#spec.rb require 'rails_helper' RSpec.describe Hoge, type: :model do describe 'validations' do subject { build(:hoge) } describe 'validates :number, presence: true, length: { is: 20 }' do before do allow_any_instance_of(described_class).to receive(:set_num) end it { is_expected.to validate_presence_of(:secret) } it { is_expected.to validate_length_of(:secret).is_equal_to(20) } end end end
どのように解決すれば良いでしょうか?
あなたの回答
tips
プレビュー