我是TDD,RSpec和工厂的新手,并试图了解如何测试每个用户的电话号码属性是否唯一。为此,我尝试在我的用户工厂中使用序列。我在以下方面运气不佳:
FactoryGirl.define do
factory :user do
number = 123456789
sequence(:phone_number) {|n| (number + n).to_s }
end
end
关于实现这一目标的最佳方法的任何想法?另外,什么样的测试对于这样的事情是有意义的,最终我想将以下验证添加到用户模型中以使这样的测试通过?
validates :phone_number, :uniqueness => true
谢谢!
尝试使用带有随机 10 位数字的 lambda:
phone_number { rand(10**9..10**10) }
试试这个:
FactoryGirl.define do
sequence :phone_number do |n|
"123456789#{n}"
end
factory :user do
phone_number
end
end
为了测试您的验证,请在您的user_spec中使用它
it { should validate_uniqueness_of(:phone_number) }
要完成@westonplatter答案,为了从0 000 000 000
开始,您可以使用 String#rjust:
FactoryGirl.define do
factory :user do
sequence(:phone_number) {|n| n.to_s.rjust(10, '0') }
end
end
例:
> 10.times { |n| puts n.to_s.rjust(10, '0') }
0000000000
0000000001
0000000002
0000000003
0000000004
0000000005
0000000006
0000000007
0000000008
0000000009
虽然随机解决方案有效,但您获得唯一编号的可能性很小。我认为你应该利用工厂女孩sequence
。
我们可以从 1,000,000,000 (100-000-000) 开始,然后递增。注意:这只会给你98,999,999,999个unqiue电话号码,这应该足够了。如果没有,您还有其他问题。
FactoryGirl.define do
sequence :phone_number do |n|
num = 1*(10**8) + n
num.to_s
end
factory :user do
phone_number
end
end