私はこのコードを持っています:
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
モックの動作を有効または無効にする方法があるかどうかを調べようとしましたが、見つけることができませんでした。正しい方法でテストを行っているかどうかわかりません。コードはうまく機能していないようです。どんな助けでも大歓迎です、ありがとう!