私はこのコードを持っています:
def self.generate_random_uniq_code
  code = sprintf("%06d", SecureRandom.random_number(999999))
  code = self.generate_random_uniq_code if self.where(code: code).count > 0
  code
end
目標は、新しいレジスタのランダム コードを作成することです。コードは、この方法でテストしようとしているレジスタに既に存在することはできませんが、SecureRandom をモックすると、常に同じ値が返されます。
it "code is unique" do
  old_code = Code.new
  old_code.code = 111111
  new_code = Code.new
  expect(SecureRandom).to receive(:random_number) {old_code.code}
  new_code.code = Code.generate_random_uniq_code
  expect(new_code.code).to_not eq old_code.code
end
モックの動作を有効または無効にする方法があるかどうかを調べようとしましたが、見つけることができませんでした。正しい方法でテストを行っているかどうかわかりません。コードはうまく機能していないようです。どんな助けでも大歓迎です、ありがとう!