[英]RSpec / FactoryGirl - Rails STI - equality
簡化示例:
我最近在Animal
模型上設置了Single Table Inheritance
。 Cat
與Dog
是子類Animal
。
我有一個Animal
工廠: factory :animal do type { ["Dog","Cat"] }.sample end
在我的測試套件中幾乎無處不在,我調用let(:animal) { Factory.create(:animal) }
因為Animal
的類型與測試無關。 由於移動到STI我在這些動物上執行相等性檢查時出錯,因為工廠返回了超類Animal
,但是當關聯對象實例化Animal
它們返回子類。
示例: expect(zoo.animal).to eq(animal)
失敗,其中: expected: #<Cat:0x007fa01a8cd360 same_other_attributes...> actual: #<Animal:0x007fa01b8d33b8 same_other_attributes...>
有沒有辦法可以更改Animal
工廠以返回其子類的實例?
我確實在工廠創建它之后嘗試在Animal
上調用.reload
,但它沒有觸發重新加載新的(子)類。 我知道你通常可以調用superclass.becomes!(subclass)
來強制進行更改,但不知道如何以實際返回轉換對象的方式將其放入FactoryGirl
回調中。
您可以使用initialize_with
強制超類工廠返回子類的實例
例如:
initialize_with do
klass = type.constantize
klass.new(attributes)
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.