ちょっと古いシステムの改修担当になり
環境整えたときにもろもろチェックしていたらFactory_girl
を使っていたので
これをFactory_bot
に変更するときにすこし躓いたので備忘録程度のメモ。
何はともあれ、Gemの修正
Factory_girl_rails
がGemfileにかかれていたので
これをFactory_bot_rails
に変更してbundle install
- gem "factory_girl_rails"
+ gem "factory_bot_rails"
※うちのプロジェクトではユニコーン周りでいろいろ干渉したため
bundle install --without production
を実行
正直これだけで大丈夫だと思ってた。
無事にgemのインストールが完了したのでテストしてみると
なにやらfactories以下のファイルでエラーが発生。
コードも何も修正してないのになんで?って思っていろいろググる
そしたら伊藤さんの記事に出会う。
factory_bot 4.11で非推奨になった静的属性(static attributes)
まさかと思って自分のGemfile.lock
を確認しにいくと・・・
factory_bot (5.0.2)
activesupport (>= 4.2.0)
factory_bot_rails (5.0.1)
factory_bot (~> 5.0.0)
railties (>= 4.2.0)
Oh...4.11
どころか更に上の5.0.2
まで上がってるのね。。
(2019/2/9にアプデされた様子)
ということでコードを静的属性から動的属性に修正
記事内容にも書かれているように、4.11
からファクトリ定義が
静的属性のままでは警告が出る仕様に変更になっている
(そしてバージョン5で完全に削除されている)ので、
これを自分のコードにも反映。
FactoryGirl.define do
factory :test do
trait :default do
hogehoge "TEST_TEMP"
fugafuga "テスト用デフォルトテンプレート"
delete_flg 0
end
end
end
から
FactoryBot.define do
factory :test do
trait :default do
hogehoge { "TEST_TEMP" }
fugafuga { "テスト用デフォルトテンプレート" }
delete_flg { 0 }
end
end
end
定義に{}
をつけるだけの簡単なお仕事。
※1行目のGirl
からBot
への修正も忘れずに・・!
これで、テストが通るようになったのでめでたし。
今回は、修正箇所がそこまで多くなかったので
手作業で変更していったがrubocop-rspec
のgemをインストールして
以下のコマンドを実行すれば一括で修正してくれるみたい(便利
rubocop \
--require rubocop-rspec \
--only FactoryBot/AttributeDefinedStatically \
--auto-correct