背景
Railsのテストには外せないライブラリと言っても過言ではないテストデータの生成管理用ライブラリことthoughtbot/factory_bot
しかし、あるテストでいつもどおりにモデルのテストデータを書いてたらエラーになった。
FactoryBot.define do factory :hoge_model do method { "get" } end end
普通にDBのカラムに method
ってのがあって、それを定義しているだけなのだが、よくわからないエラー。ここをコメントアウトすると直る。
どうも method
がFactoryBotの予約語と衝突しているんじゃないかと思ってきた。
原因と対策
本当に予約語でした。本当にありがとうございました。
が、FactoryBotは親切なので、公式ドキュメントに回避方法まで記載されていた。
以下のように修正すればいつもどおりにmethodカラムが定義できて、テストもちゃんと通るようになる。
add_attribute(:method) { "get" } # methodが予約語のため
ちなみにドキュメントにも案内があるように、予約語はFactoryBot::DefinitionProxyのUNPROXIED_METHODSに定義されている。
2019年9月12日現在では以下
- send
- id
- nil?
- send
- object_id
- extend
- instance_eval
- initialize
- block_given?
- raise
- caller
- method
なるほどこの一番下のmethodとバッティングしてしまったというわけか けど他は被りそうもないし、そこまで毎回気をつけないといけないわけではなさそう