私はメソッドを持つモデル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
任意の指示をいただければ幸いです。