【问题标题】:Creating instances with unique attributes using Factory Girl使用 Factory Girl 创建具有独特属性的实例
【发布时间】:2011-03-15 20:36:45
【问题描述】:

我在 guid 字段上放置了一个约束和一个验证,因此每个都是唯一的。问题是,使用下面的工厂定义,我只能创建一个用户实例,因为其他实例无法通过验证。

如何正确执行此操作以使 guid 字段始终是唯一的?

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

【问题讨论】:

    标签: ruby factory-bot


    【解决方案1】:

    一般来说,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
    

    【讨论】:

    • +1 OP 出现问题的原因是因为 guid 创建代码是在工厂定义时评估的,因此每次调用工厂的值都是恒定的。三种可能的解决方案中的第三种将在每次调用工厂时生成一个新的 GUID,这几乎肯定是 OP 正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多