Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby: FactoryBot.lintでFactoryの壊れないようにチェックする

FactoryBotを利用してテストデータを管理していて、開発が進んでいくとデフォルトで作成したときにエラーになるようなFactoryが作られてしまったりします。

github.com

そんなときにFactoryBot.lintを使うとFactoryが壊れたときに気づけて便利だったのでメモしておきます📝

やり方は簡単で以下のようなテストを追加するだけです。

require 'rails_helper'

RSpec.describe FactoryBot, type: :model do
  describe '.lint' do
    it 'すべてのFactoryが正常に機能すること' do
      FactoryBot.lint traits: true
    end
  end
end

上記設定だとdefault及びtraitを付与した状態でFactoryをcreateしたときにエラーが発生しないかチェックしてくれます。 ※実態はpublic_sendでstrategy(create or build)を実行してエラー発生有無を監視しているようですね👀

https://github.com/thoughtbot/factory_bot/blob/92114db048b70096183af622173506535b150e65/lib/factory_bot/linter.rb#L73

エラーが発生した場合には以下のような形でエラーになります。

  1) FactoryBot.lint すべてのFactoryが正常に機能すること
     Failure/Error: FactoryBot.lint traits: true
     
     FactoryBot::InvalidFactoryError:
       The following factories are invalid:

以下のFacotyBotのREADMEに詳しい使い方が書いてあるので気になる人は見てみてください📕

github.com