Создание экземпляров с уникальными атрибутами с помощью Factory Girl - PullRequest
6 голосов
/ 14 июля 2010

У меня есть ограничение и проверка, помещенные в поле guid, чтобы каждое из них было уникальным.Проблема заключается в том, что с помощью приведенного ниже определения фабрики я могу создать только один пользовательский экземпляр, так как дополнительные экземпляры не проходят проверку.

Как мне сделать это правильно, чтобы поле guid всегда было уникальным?

Factory.define(:user) do |u|
  u.guid UUIDTools::UUID.timestamp_create.to_s
end

1 Ответ

11 голосов
/ 14 июля 2010

Обычно Factory Girl решает проблему с последовательностями:

Factory.define(:user) do |u|
  u.sequence(:guid) { |n| "key_#{n}" }
end

Я предполагаю, однако, что вы не хотите иметь что-то похожее на итератор, но отметку времени. Это можно сделать, используя ленивые атрибуты (которые оцениваются во время выполнения):

Factory.define(:user) do |u|
  u.guid { Time.now.to_s }
end

Или, предполагая, что UUIDTools :: UUID.timestamp_create генерирует (надеюсь, соответствующим образом отформатированный) отметку времени:

Factory.define(:user) do |u|
  u.guid { UUIDTools::UUID.timestamp_create.to_s }
end
...