如何在 FactoryBot 特征中取消设置属性?

Ala*_*ira 1 rspec ruby-on-rails factory-bot

在我的模型中,我有一个具有默认值的属性foo

我想编写一个与foo的默认值相关的测试,但我的 FactoryBot 将其设置为 nil (并覆盖默认值)。

如果我从工厂机器人中删除foo它将破坏一些其他测试。所以我想使用类似trait 的东西来创建一个foo不是 net 的情况,但我没有找到任何方法来取消设置属性。

有没有办法在 FactoryBot 中取消设置属性?

FactoryBot.define do
  factory :my_model do
    foo { 'abc' }
    bar { 'abc' }

    trait(:foo_not_set) do
      # magic to unset foo
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

nua*_*aky 5

您可以使用瞬态块来处理虚拟属性:

FactoryBot.define do
  factory :my_model do
    bar { 'abc' }

    transient do
      default_values true
    end

    before(:create) do |my_model, evaluator|
      if evaluator.default_values?
        foo { 'abc' }
      end
    end

    trait(:foo_not_set) do
      transient do
        default_values { false }
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)