【问题标题】:How do I declare shared attributes for Rails fixtures?如何为 Rails 固定装置声明共享属性?
【发布时间】:2014-05-22 11:06:28
【问题描述】:

我正在尝试使用夹具和 MiniTest 开始 (Rails) 测试。 该应用程序正在发展,因此稍后可能会将其他属性集成到模型中。 有没有办法声明所有其他灯具中使用的“默认”属性或基本灯具种类?

例如:

base_user:
  name: testy testicle
  mail: some_mail@example.com
  gender: male

user1:
  avatar: some_avatar #add
  admin: false #add

user2:
  admin:true #add
  gender: female #overwrite

所以 user1user2 共享 base_user 的属性? 甚至可能共享属性并在必要时覆盖?

我想声明基本属性以通过验证等,并且只想在其他夹具中声明特殊属性。 当需要新属性时,我可以将它们添加到 base_fixture,而不是更新模型的所有固定装置。

【问题讨论】:

    标签: ruby-on-rails tdd yaml dry fixtures


    【解决方案1】:

    您可以使用 YAML 锚点和引用工具。这看起来像这样:

    base_user: &BASE_USER # <- Declare an anchor named BASE_USER
      name: # etc.
    
    user1:
      <<: *BASE_USER # <- Reference the anchor, bringing all the attributes of base user into user1
      avatar: # etc.
    

    【讨论】:

    • 对此要注意的一点是base_user 仍将在数据库中创建。因此,如果base_user 不包含通过数据库约束所需的任何属性,您将在测试套件运行时从数据库中收到错误。
    • 对于共享属性绝对有用。是否可以覆盖例如如果在 base_user 和 user1 中声明了性别?
    • 应该没问题。如果您在引用基础对象后为user1 赋予属性gender: female,这就是您将在user1 中获得的值,即使基础对象已经具有gender 属性。
    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多