STIを利用している場合のFactoryBotのfactory定義について
STIを活用しているモデルは、スーパークラスでfactoryを定義して、テストでオブジェクトの比較をすると、スーパークラスのままのものと、 サブクラスに変換されているものとの比較になってしまうことがあり、そのためテストが落ちることがある
以下のように書くことによって、typeを元にSTIのクラスを取得し、それを使ってオブジェクトが初期化できるようになる
FactoryBot.define do factory :factory_name do initialize_with do klass = type.constantize klass.new(attributes) end # 以下factoryの定義 end end