【问题标题】:FactoryGirl: How To Set Trait to TrueFactoryGirl:如何将 Trait 设置为 True
【发布时间】:2016-02-05 06:21:41
【问题描述】:

我为我的 Request 模型创建了一个工厂。该模型有一个布尔值,在数据库级别默认为“false”。我创建了一个名为 :fulfilled_request 的工厂,它使用 FactoryGirl 中的 trait 功能,但是,即使正在调用它,创建的 Request 实例也具有 falseis_fulfilled 属性。有任何想法吗?下面是我的工厂:

  factory :request do
    content { Faker::Lorem.paragraph }
    association :requester
    association :group

    trait :has_neighbor do
      association :responder
    end

    trait :is_fulfilled do
      is_fulfilled true
    end

    trait :created_one_day_ago do
      created_at { 1.day.ago }
    end

    factory :request_with_neighbor, traits: [:has_neighbor]
    factory :fulfilled_request , traits: [:has_neighbor, :is_fulfilled]
    factory :day_old_request, traits: [:created_one_day_ago]
  end

【问题讨论】:

  • 您的意思是:FactoryGirl.create(:fulfilled_request).is_fulfilled 为您返回 false?还是涉及到其他一些逻辑?
  • 您能在规范中说明您是如何称呼工厂的吗?您的模型上的列也称为is_fulfilled 或只是fulfilled

标签: ruby-on-rails factory-bot faker


【解决方案1】:

这样称呼你的工厂。

FactoryGirl.create(:request, :is_fulfilled)

这将根据需要使用特征。

【讨论】:

    【解决方案2】:

    不幸的是,这不起作用的原因是模型中有一个after_create 回调将is_fulfilled 属性设置为false

    这样做是为了反映模型中的数据库约束。我认为这是在模型中镜像数据库约束没有意义的少数情况之一。数据库设置为默认此属性为 false。 (因此,数据库也应该具有 NOT NULL 约束)。

    我只是发布这个以获得完整的文档并帮助可能遇到此问题的其他人。检查你的回调!

    附:感谢 #thoughtbot (irc) 上的 sikachu 帮助我发现了这一点。

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 2020-06-04
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2016-12-29
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多