我正在对我的系统进行重大更改,因此我将我的一个主表更改为 STI,并创建子类来实现特定行为。
class MainProcess < ApplicationRecord
end
class ProcessA < MainProcess
end
class ProcessB < MainProcess
end
在应用程序代码中,如果我运行
MainProcess.new(type: 'ProcessA')
它将返回 进程A 如我所愿。但是在我运行时的 Rspec 测试中
FactoryBot::create(:main_process, type: 'ProcessA')
它返回一个 主进程并打破我的测试。我的因素是这样的
FactoryBot.define do
factory :main_process do
foo { 'bar' }
end
factory :process_a, parent: :main_process, class: 'ProcessA' do
end
factory :process_b, parent: :main_process, class: 'ProcessB' do
end
end
有没有办法让 FactoryBot 具有与普通程序相同的行为?
最佳答案
我找到了解决方案
FactoryBot.define do
factory :main_process do
initialize_with do
klass = type.constantize
klass.new(attributes)
end
end
...
end
答案就在这里http://indigolain.hatenablog.com/entry/defining-factory-for-sti-defined-model (日语)
关于ruby-on-rails - 如何让 FactoryBot 返回正确的 STI 子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57504422/