我有一个模型PromoCode
,它有一个.generate!
方法,调用.generate
它生成一个字符串SecureRandom.hex(5)
并将其保存到数据库中:
class PromoCode < ActiveRecord::Base
class << self
def generate
SecureRandom.hex 5
end
def generate!
return create! code: generate
end
end
end
现在我想编写一个规范来测试生成的字符串的唯一性。.generate
只要生成了不存在的 PromoCode,就应该调用该方法。
我不确定如何执行此操作,因为我无法真正删除.generate
返回固定值的方法(因为那样它会陷入无限循环)。
这是迄今为止模型的通过规范:
describe PromoCode do
describe ".generate" do
it "should return a string with a length of 10" do
code = PromoCode.generate
code.should be_a String
code.length.should eql 10
end
end
describe ".generate!" do
it "generates and returns a promocode" do
expect {
@promo = PromoCode.generate!
}.to change { PromoCode.count }.from(0).to(1)
@promo.code.should_not be_nil
@promo.code.length.should eql 10
end
it "generates a uniq promocode" do
end
end
end
任何方向表示赞赏。