簡體   English   中英

RSpec / FactoryGirl - Rails STI - 平等

[英]RSpec / FactoryGirl - Rails STI - equality

簡化示例:

我最近在Animal模型上設置了Single Table Inheritance CatDog是子類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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM