gpt4 book ai didi

ruby - 如何获取传递给 factory_girl 方法的特征列表?

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:59 26 4
gpt4 key购买 nike

#spec
let(:price) { create :price,:some_trait,:my_trait }

#factory
FactoryGirl.define do
factory :price, class: 'Prices::Price' do
...

after(:build) do |p,e|

# How I can get the traits passed to the create method?
# => [:some_trait,:my_trait]

if called_traits_does_not_include(:my_trait) # fake code
build :price_cost,:order_from, price:p
end
end

...
end
end

如何在工厂的 after(:build) 回调中获取传递给 create 的特征?

最佳答案

我不知道有明确支持此功能的 factory_girl 功能。但我可以想到两个可能适用于特定情况的部分解决方案:

  1. 在特征中设置一个 transient 属性:

    trait :my_trait do
    using_my_trait
    end

    factory :price do
    transient do
    using_my_trait false
    end

    after :build do |_, evaluator|
    if evaluator.using_my_trait
    # Do stuff
    end
    end

    end

    此方法需要您要跟踪的每个特征的 transient 属性。

  2. 如果您不需要知道在 after :build 回调中使用了哪些特征,但您希望跟踪多个特征而不为每个特征添加 transient 属性,请添加特征到特征中 after :build 回调中的列表:

    trait :my_trait do
    after :build do |_, evaluator|
    evaluator.traits << :my_trait
    end
    end

    factory :price do
    transient do
    traits []
    end

    before :create do |_, evaluator|
    if evaluator.traits.include? :my_trait
    # Do stuff
    end
    end

    end

    (特征中的回调在工厂中相应的回调之前运行,所以如果您最早在其回调中注意到特征,您可以看到它在 before :create 中。)这可能比第一种方法,如果你想跟踪很多工厂中的特征,这会使为每个特征添加一个 transient 属性更加痛苦。

关于ruby - 如何获取传递给 factory_girl 方法的特征列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com