---
title: "FactoryBot 也可以用在非 ActiveRecord 的 model 上"
description: "你可以用 FactoryBot 的 initialize\\with* 方法，以任何你想要的方式初始化物件，讓你能隨心所欲地為任何物件建立 factory"
canonical: https://oozou.com/til/you-can-use-factorybot-for-non-activerecord-models-45
locale: zh-Hant
date: 2020-10-13
topic: ruby
---

# FactoryBot 也可以用在非 ActiveRecord 的 model 上

> 你可以用 FactoryBot 的 initialize\with* 方法，以任何你想要的方式初始化物件，讓你能隨心所欲地為任何物件建立 factory

Published: 2020-10-13 · Topic: [ruby](https://oozou.com/zh-Hant/til-topics/ruby) ([markdown](https://oozou.com/zh-Hant/til-topics/ruby.md))

你可以用 FactoryBot 的 *initialize\_with* 方法，以任何你想要的方式初始化物件，讓你能隨心所欲地為任何物件建立 factory

```ruby
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 應用程式中廣受歡迎的測試工具，讓開發者能隨時定義並建立測試 fixture。它提供靈活又有效率的方式來建立測試資料，讓測試更容易撰寫與維護。在這篇文章中，我們會探討如何在 Rails 測試中有效使用 FactoryBot。

# 設定 FactoryBot

要在你的 Rails 應用程式中設定 FactoryBot，你需要把 factory\_bot 這個 gem 加進 Gemfile，然後執行 bundle install 指令。接著你可以在 config/initializers 目錄建立一個 factory\_bot.rb 檔案來設定 FactoryBot。在這個檔案裡，你可以定義 factory\_bot 的設定，例如 factory 的路徑和預設 strategy。

# 定義 model 與 factory

在 FactoryBot 中，factory 是建立物件的藍圖。你可以在 factories 目錄建立檔案，為某個 model 定義 factory。舉例來說，如果你有一個 User model，可以在 factories 目錄建立 user.rb 檔案來定義 user factory。在這個檔案裡，你可以定義 user factory 的屬性和關聯。

# factory 的選項與屬性

FactoryBot 提供了多種選項和屬性，讓你自訂 factory。舉例來說，你可以用 class 屬性指定要建立的物件的類別。你也可以用 attributes 選項定義 factory 的屬性。此外，你還可以用 association 選項定義 factory 之間的關聯。

# 結語

總結來說，FactoryBot 是在 Rails 應用程式中建立測試 fixture 的強大工具。透過為 model 定義 factory，你可以快速且有效率地建立測試資料。憑藉靈活的設定選項和可自訂的屬性，FactoryBot 讓測試更容易撰寫與維護。遵循本文提到的最佳實務，你就能充分發揮 FactoryBot 的價值，提升測試品質。

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/zh-Hant/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
