【RSpec】FactoryBotで KeyError: Trait not registered: が出た時に確認すること
RSpecでFactoryBotを使っていたときに遭遇したエラー。
KeyError: Trait not registered:
結論から言うと凡ミスだったのですが場合によっては気づきにくいのでアウトプットして定着させておこうと思ってこの記事を書いています。
前提として、
spec/factories/product.rb
# frozen_string_literal: true FactoryBot.define do factory :product, class: Product do supplier price buy_count { 0 } end end
みたいな感じでfactoryを定義していました。
このfactoryをspec側で
create(:product, supplier: supplier, price: 1000)
のように使おうとすると
KeyError: Trait not registered: "price"
というエラーがでました。
定義しているのにおっかしいなーと思ってあれやこれやしている内に、「あれ、priceって関連先モデルがあるわけじゃないぞ」ということに気づいたわけです。
ということで、
price → price {}
とすると期待通りの動作をしました。
ちなみに、 Rails6 Ruby2.7 の環境です。(バージョンと今回の問題は多分関係ないです。)