gpt4 book ai didi

factory-bot - 工厂女孩 - 我们如何访问传递给方法的覆盖?

转载 作者:行者123 更新时间:2023-12-01 06:30:07 24 4
gpt4 key购买 nike

这个问题与覆盖在 FactoryGirl 中何时/如何工作有关

对于我的具体问题,我有一个具有“限制”属性的组织。 after(:create) 部分设置了一些其他值,最后进行保存。保 stub 据 organization.after_save 方法中的逻辑重置“限制”。所以我不得不做 update_attributes 所以'limits'被设置为在工厂女孩中定义的任何东西。

除了限制被规范覆盖的情况外,这一切都正常。

这是代码:



factory :organization do
sequence(:name) {|n| "org#{n + $offset}" }
.....
limits_attributes :projectsLimit => 1, :svnEnabled => true, :deployEnabled => true
...
after(:create) do | org |
sub = FactoryGirl.create(:subscription, :organization => org)
sp = FactoryGirl.create(:subscription_plan, :subscription => sub)
sub.subscription_plans << sp
org.subscription = sub
org.status = :active
org.save
# Since entitlements are messed up after setting sub-plan set them here.
org.limits.update_attributes(:projectsLimit => 1, :svnEnabled => true, :deployEnabled => true)
end
end

当“限制”被覆盖时,这会失败,显然是因为我没有得到被覆盖的属性:

FactoryGirl.create(:organization, :limits_attributes => {:gitEnabled => true, :projectsLimit => 3})

我尝试使用attributes_for获取属性,我误解了attributes_for来获取传递给“创建组织”的值



org_attrs = FactoryGirl.attributes_for(:organization)
puts "atts #{org_attrs}"
org.save
# Since entitlements are messed up after setting sub-plan set them here.
org.limits.update_attributes(org_attrs[:limits_attributes])



鉴于我无法更改组织的 after_save 中的逻辑,如果用户覆盖它们,我该如何更新限制?在事物流中的哪个位置是应用于 FactoryGirl 中定义的模型的覆盖。

我认为我解释代码正在做什么的方式可能存在缺陷,或者我希望解决的场景不适合 FG 的使用方式。

谢谢。

最佳答案

我对覆盖的值不正确。 org 在保存之前设置了值(不管是覆盖还是默认值)。所以只需在之前保存一个副本并重用它就可以了。不确定这是否是一个好的解决方案



org_limits = org.limits.dup
org.save
# Since entitlements are messed up after setting sub-plan set them here.
org.limits.update_attributes(org_limits.attributes)

关于factory-bot - 工厂女孩 - 我们如何访问传递给方法的覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116936/

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