FactoryBot(旧FactoryGirl) のバージョンを上げたらundefined methodになった問題





FactoryBot(旧FactoryGirl, ポリコレ的な何かでライブラリ名が変更になった)のバージョンを5.0.0に上げるとエラーで動かなくなった。

エラーメッセージ

/path/to/product/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.0/lib/factory_bot/definition_proxy.rb:97:in `method_missing': undefined method 'title' in 'theme' factory (NoMethodError)

解決方法

FactoryBot.define do
  factory :theme do
    user {nil}
    title Faker::Pokemon.name # この書き方では5系では動かない
    status {:published}
  end
end

こういうやつを

FactoryBot.define do
  factory :theme do
    user {nil}
    title {Faker::Pokemon.name}
    status {:published}
  end
end

このようになおす。

属性名とそれに対応するデフォルト値を、今までは(上の書き方のように)スペースでも定義できていたが、5.0.0からは中括弧{}でくくらないと動かなくなる模様。

ちなみにFactoryBot4系ではDeprecation Warningが出るはずなので、5.0へのアップデートを行う前に早めに対応しておきましょう。