###### tags: `memo` # gem factory_botでModelに定義したEnum値からtraitを自動登録する機能 - Enum traits [Enum traits](https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md#enum-traits) という機能 個人的にtraitは明示的に定義して利用したいなと思ったのでOFFにした ## 設定方法 `rails_helper.rb` などの設定ファイルに以下設定すると、この機能がOFFになる ```ruby FactoryBot.automatically_define_enum_traits = false ``` ## 所感 - ModelのEnum値を拾ってtraitとして自動登録する機能 - デフォルトでONになっており、やや暗黙的に機能する - テストファイル内で明示的に定義していないのに、traitを利用しても未定義エラーにならないデフォルトの挙動が少し気になった - 関連モデルデータもtrait内で同時に生成するなど、Enum値と似た名前のtraitを定義していた場合、気づかず誤って使用すると意図しないデータでテストしていたことがあった - 最初、機能の存在を知らなかった。 - traitを定義していないのに、エラーも吐かずになぜが動く自動テストがあることを不思議に思ったのがきっかけ - 全体でON/OFFしかできないオプションなので、Modelごとに設定できればすてきですねとのIssueが立っていた ## 参考 - thoughtbot/factory_bot: A library for setting up Ruby objects as test data. https://github.com/thoughtbot/factory_bot - Allow overriding of `FactoryBot.automatically_define_enum_traits` on a per-factory basis · Issue #1597 · thoughtbot/factory_bot https://github.com/thoughtbot/factory_bot/issues/1597