使用工厂的序列生成唯一的电话号码

dou*_*ets 2 tdd rspec ruby-on-rails sequence factories

我是TDD,RSpec和工厂的新手,并试图了解如何测试每个用户的电话号码属性是否唯一.为此,我正在尝试在用户工厂中使用序列.以下我没有太多运气:

FactoryGirl.define do
  factory :user do
    number = 123456789
    sequence(:phone_number) {|n| (number + n).to_s }
  end
end
Run Code Online (Sandbox Code Playgroud)

有关实现这一目标的最佳方法的任何想法?此外,什么样的测试对于这样的事情是有意义的,最终我想要将以下验证添加到用户模型以进行这样的测试通过?

validates :phone_number, :uniqueness => true
Run Code Online (Sandbox Code Playgroud)

谢谢!

can*_*man 7

尝试使用带有随机10位数字的lambda:

phone_number { rand(10**9..10**10) } 
Run Code Online (Sandbox Code Playgroud)

  • 这不能确保您获得唯一的电话号码。尽管使用了drekyau指出的序列来确保它的可能性极小,但无论如何还是要提供更好的实践。 (2认同)

der*_*yau 5

尝试这个:

FactoryGirl.define do
  sequence :phone_number do |n|
     "123456789#{n}"
  end

  factory :user do
    phone_number
  end
end
Run Code Online (Sandbox Code Playgroud)

为了测试您的验证,请在您的 user_spec 中使用它

it { should validate_uniqueness_of(:phone_number) }
Run Code Online (Sandbox Code Playgroud)