我有一个模型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
现在我想写测试所产生的独特性规范串。只要生成不存在的PromoCode,就应该调用.generate
方法。
我不知道如何做到这一点,因为我无法真正地将.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
理解的任何指示。
哇,不知道这件事,而且实现甚至比我有更多的优雅介意(使用循环和find_by_code)。非常感谢! – 2012-08-10 13:29:38