OOZOU
お問い合わせ
TIL一覧に戻る
ruby

FactoryBotはActiveRecord以外のモデルにも使える

2020年10月13日

FactoryBotの initialize_with メソッドを使うと、オブジェクトを好きな方法で初期化でき、任意のオブジェクトを自在にファクトリー化できます

FactoryBot.define do
  factory :citizen_id_image, class: CitizenIdImagePresenter do
    image_url { 'https://placehold.it/200x200' }

    initialize_with { new(image_url: image_url) }
  end
end
build(:citizen_id_image)
#=> 

はじめに

FactoryBotは、開発者がテストフィクスチャをその場で定義・作成できる、Ruby on Railsアプリケーション向けの人気のテストツールです。テストデータを柔軟かつ効率的に作成する手段を提供し、テストの記述とメンテナンスを容易にしてくれます。この記事では、RailsのテストでFactoryBotを効果的に使う方法を探ります。

FactoryBotのセットアップ

RailsアプリケーションでFactoryBotをセットアップするには、Gemfileに factory_bot gemを追加し、bundle install コマンドを実行します。その後、config/initializers ディレクトリに factory_bot.rb ファイルを作成してFactoryBotを設定できます。このファイルでは、ファクトリーのパスやデフォルトのストラテジーなど、factory_bot の設定を定義できます。

モデルとファクトリーの定義

FactoryBotにおけるファクトリーとは、オブジェクトを作成するための設計図です。factories ディレクトリにファイルを作成することで、モデルのファクトリーを定義できます。たとえばUserモデルがある場合、factories ディレクトリに user.rb ファイルを作成してユーザーファクトリーを定義できます。このファイルでは、ユーザーファクトリーの属性と関連を定義できます。

ファクトリーのオプションと属性

FactoryBotには、ファクトリーをカスタマイズするためのオプションや属性がいくつか用意されています。たとえば、class 属性で作成するオブジェクトのクラスを指定できます。attributes オプションでファクトリーの属性を定義することもできます。さらに、association オプションでファクトリー間の関連を定義できます。

まとめ

まとめると、FactoryBotはRailsアプリケーションでテストフィクスチャを作成するための強力なツールです。モデルのファクトリーを定義することで、テストデータを素早く効率的に作成できます。柔軟な設定オプションとカスタマイズ可能な属性により、FactoryBotはテストの記述とメンテナンスを容易にしてくれます。この記事で紹介したベストプラクティスに従えば、FactoryBotを最大限に活用してテストの品質を向上させられます。

「ruby」の関連記事

ruby2021年4月30日

先頭ドット記法を使った複数行の Ruby ブロックを Pry に貼り付けられるようにする

最近は先頭ドット記法をよく使います。例:

ruby2020年10月14日

式展開なしの Heredoc

Ruby の Heredoc を式展開('#{....}')なしで使いたいことがあります。キーワードの前後にシングルダッシュを追加することで実現できます:

ruby2020年10月13日

Ruby で中間階層のハッシュテーブルを自動生成する

すべての中間階層のハッシュテーブルが自動的に作成されます

プロジェクトをお考えですか?

あなたが構築しているものについてお聞かせください。

会話を始めるhello@oozou.com
OOZOU Logo

バンコク · シンガポール · 香港

X
Facebook
Instagram
LinkedIn

サービス

  • Web開発
  • AIエージェント & 生成AI
  • モバイルアプリ開発
  • データ分析 & エンジニアリング
  • UI/UX & プロダクトデザイン
  • デジタルトランスフォーメーション

会社情報

  • 会社概要
  • 採用情報
  • ブログ
  • 事例研究
  • Today I Learned
  • お問い合わせ

その他

  • 業界
  • パートナーネットワーク
© 2026 OOZOU. 無断転載を禁じます。
プライバシーポリシー行動規範ABACポリシー