我有一个模型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
任何方向表示赞赏。