我有这个代码:
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
我试图找出是否有办法启用和禁用模拟行为,但我找不到它,我不确定我是否以正确的方式进行测试,代码对我来说似乎无法正常工作。欢迎任何帮助,谢谢!