在FactoryBot中禁用设置属性

问题描述 投票:1回答:1

我有一个带有active字段的ActiveRecord模型。我有一些验证,如果创建时active = true,肯定会失败。我在出厂时默认将active设置为false,但我想加倍努力,并禁止更改它,最好带有有意义的错误消息。我该怎么办?

有效的用例将如下所示:

my_model = create(:my_model) # my_model.active == false
# do some other setup
my_model.update!(active: true)

我想实现的是这个

create(:my_model, active: true)
# => raise FactoryOptionsNotAllowed: cannot be active upon creation

[不幸的是,after(:build)不像it runs after associations are saved防弹。因此,在保存关联时发生错误时,它将不会达到after(:build)

ruby-on-rails ruby activerecord factory-bot
1个回答
3
投票

您可以在工厂中使用after(:build)

factory :my_model do
  active { true }

  after(:build) do |model|
    unless model.active
      raise FactoryBot::InvalidFactoryError, 'active cannot be false'
    end
  end
end

您可能想要定义自己的异常类型,而不是使用FactoryBot InvalidFactoryError

© www.soinside.com 2019 - 2024. All rights reserved.