フリーランスエンジニア→法人化した人の技術ブログ。フリーランス事情や会社の作り方、経営などについても徒然なるままに書いていきます。主な使用言語はRuby、JavaScript。

Permanent Til

Ruby

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へのアップデートを行う前に早めに対応しておきましょう。

一括で直す

rubocop-rspecがある前提ならば、以下のコマンドで一括でFactoryの記述を修正することができます。

rubocop --require rubocop-rspec --only FactoryBot/AttributeDefinedStatically --auto-correct

参考:Deprecating static attributes in factory_bot 4.11


-Ruby

Copyright© Permanent Til , 2019 All Rights Reserved Powered by AFFINGER5.