gpt4 book ai didi

ruby-on-rails - RSpec/FactoryGirl - Rails STI - 平等

转载 作者:行者123 更新时间:2023-12-01 09:48:19 28 4
gpt4 key购买 nike

简化示例:

我最近设置了 Single Table InheritanceAnimal 上模型。 CatDogAnimal 的子类.

我有一个 Animal工厂 :
factory :animal do
type { ["Dog","Cat"] }.sample
end

我调用的测试套件中几乎所有地方 let(:animal) { Factory.create(:animal) }因为 Animal 的类型与测试无关。自从转向 STI 以来,我在对这些动物执行相等性检查时遇到错误,因为父类(super class) Animal由工厂返回,但当关联对象实例化时 Animal他们返回子类。

例子: expect(zoo.animal).to eq(animal)失败:
expected: #<Cat:0x007fa01a8cd360 same_other_attributes...>
actual: #<Animal:0x007fa01b8d33b8 same_other_attributes...>

有什么办法可以改变 Animal工厂返回其子类的实例?

我试过调用.reloadAnimal 上在工厂创建它但它没有触发重新加载新的(子)类之后。我知道通常你可以打电话superclass.becomes!(subclass)强制更改但不知道如何将其放入 FactoryGirl以实际返回转换后的对象的方式进行回调。

最佳答案

您可以使用 initialize_with 强制父类(super class)工厂返回子类的实例

例如:

initialize_with do
klass = type.constantize
klass.new(attributes)
end

关于ruby-on-rails - RSpec/FactoryGirl - Rails STI - 平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959977/

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