91s

プログラミング関係、日記などを書きます

【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 の環境です。(バージョンと今回の問題は多分関係ないです。)