8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Factory_girlからFactory_botに変更したときに詰まった話

Last updated at Posted at 2019-03-07

ちょっと古いシステムの改修担当になり
環境整えたときにもろもろチェックしていたら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
8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?