Как я могу заставить Forgery возвращать неподтвержденные данные в определении Factory_girl

#ruby-on-rails #rspec #factory-bot #ruby-forgery

#ruby-on-rails #rspec #factory-бот #ruby-подделка

Вопрос:

Моя фабрика выглядит так:

 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
  

Конечно, должен быть лучший способ?

Ответ №1:

Вот как я бы это сделал (используя новый синтаксис 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)