---
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-Hans
date: 2020-10-13
topic: ruby
---

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

> 你可以用 FactoryBot 的 initialize\with* 方法，以任何你想要的方式初始化对象，让你能随心所欲地为任何对象创建 factory

Published: 2020-10-13 · Topic: [ruby](https://oozou.com/zh-Hans/til-topics/ruby) ([markdown](https://oozou.com/zh-Hans/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-Hans/contact

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