如何强制 Forgery 返回 Factory_girl 定义中的独特数据

发布于 2024-12-12 10:35:43 字数 515 浏览 0 评论 0原文

我的工厂看起来像这样:

Factory.define :coupon do |c|
  c.title { Forgery(:lorem_ipsum).sentences(3, :random => true) }
end

我从 Rspec 发出的电话看起来像这样:

coupons = []
5.times {|i| coupons << Factory(:coupon, :starts_at => i.days.ago) }

对于我的优惠券模型,我进行了验证,要求标题是唯一的。我能够运行此测试的唯一方法是在我的工厂中执行此操作:

Factory.define :coupon do |c|
  c.title {|i| Forgery(:lorem_ipsum).sentences(3, :random => true) + "#{i}" }
end

肯定有更好的方法吗?

My factory looks like this:

Factory.define :coupon do |c|
  c.title { Forgery(:lorem_ipsum).sentences(3, :random => true) }
end

And my call from Rspec looks like this:

coupons = []
5.times {|i| coupons << Factory(:coupon, :starts_at => i.days.ago) }

With my Coupon model I have a validation with requires the title to be unique. The only way I am able to run this test is by doing this in my factory:

Factory.define :coupon do |c|
  c.title {|i| Forgery(:lorem_ipsum).sentences(3, :random => true) + "#{i}" }
end

Surely there must be a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷鸟归林 2024-12-19 10:35:43

这就是我的做法(使用新的 Factory Girl 语法):

FactoryGirl.define do
  factory :coupon do
    sequence(:title)     { |n| Forgery::LoremIpsum.words(n, :random => true) }
    sequence(:starts_at) { |n| n.days.ago } 
  end
end

然后在规范中创建优惠券:

coupons = FactoryGirl.create_list(:coupon, 5)

This is how I would do it (using the new Factory Girl syntax):

FactoryGirl.define do
  factory :coupon do
    sequence(:title)     { |n| Forgery::LoremIpsum.words(n, :random => true) }
    sequence(:starts_at) { |n| n.days.ago } 
  end
end

Then creating coupons in a spec:

coupons = FactoryGirl.create_list(:coupon, 5)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文