OOZOU
ติดต่อเรา
กลับไปหน้า TIL
ruby

คุณใช้ FactoryBot กับ model ที่ไม่ใช่ ActiveRecord ได้

13 ตุลาคม 2563

ใช้ Method initialize_with ของ FactoryBot เพื่อ initialize object ในแบบที่ต้องการได้ จึงสร้าง factory ให้ object ไหนก็ได้ตามใจ

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 ที่ให้นักพัฒนากำหนดและสร้าง test fixture ได้แบบทันที เครื่องมือนี้ช่วยสร้างข้อมูลทดสอบได้อย่างยืดหยุ่นและมีประสิทธิภาพ ทำให้เขียนและดูแล test ได้ง่ายขึ้น ในบทความนี้เราจะมาดูวิธีใช้ FactoryBot ในการทดสอบ Rails ให้ได้ประโยชน์เต็มที่

ตั้งค่า FactoryBot

ในการตั้งค่า FactoryBot ในแอปพลิเคชัน Rails ให้เพิ่ม gem factory_bot ลงใน Gemfile แล้วรันคำสั่ง bundle install จากนั้นตั้งค่า FactoryBot ได้โดยสร้างไฟล์ factory_bot.rb ใน Directory config/initializers ในไฟล์นี้ให้กำหนดค่าของ factory_bot เช่น path ของ factory และ strategy เริ่มต้น

กำหนด model และ factory

ใน FactoryBot factory คือพิมพ์เขียวสำหรับสร้าง object กำหนด factory ให้ model ได้ด้วยการสร้างไฟล์ใน Directory factories เช่น ถ้ามี model ชื่อ User ก็สร้างไฟล์ user.rb ใน Directory factories เพื่อกำหนด factory ของ user แล้วกำหนด attribute และ association ของ factory นี้ไว้ในไฟล์เดียวกัน

ตัวเลือกและ attribute ของ factory

FactoryBot มีตัวเลือกและ attribute หลายอย่างให้คุณใช้ปรับแต่ง factory ของตัวเอง เช่น ใช้ attribute class ระบุ class ของ object ที่จะสร้าง ใช้ตัวเลือก attributes กำหนด attribute ของ factory และใช้ตัวเลือก association กำหนดความสัมพันธ์ระหว่าง factory

สรุป

สรุปแล้ว FactoryBot เป็นเครื่องมือที่ช่วยสร้าง test fixture ในแอป Rails ได้ดีมาก แค่กำหนด factory ให้ model ก็สร้างข้อมูลทดสอบได้รวดเร็ว ตั้งค่าได้ยืดหยุ่น ปรับ attribute ได้ตามต้องการ การเขียนและดูแล test จึงง่ายขึ้น ทำตาม best practice ในบทความนี้ แล้วคุณจะใช้ FactoryBot ได้เต็มที่และได้ test ที่มีคุณภาพดีขึ้น

อ่านบทความเกี่ยวกับ ruby เพิ่มเติม

ruby30 เมษายน 2564

ทำให้วางโค้ด Ruby หลายบรรทัดใน Pry ได้เมื่อใช้ leading dot notation

ตอนนี้เราใช้ leading dot notation กันบ่อยมาก เช่น

ruby14 ตุลาคม 2563

Heredoc แบบไม่มี interpolation

บางครั้งคุณอาจอยากใช้ Heredoc ของ Ruby แบบไม่มี interpolation ('#{....}') ซึ่งทำได้โดยใส่ dash เดี่ยวรอบ keyword:

ruby13 ตุลาคม 2563

สร้าง hashtable ระดับกลางให้อัตโนมัติใน Ruby

hashtable ระดับกลางทั้งหมดจะถูกสร้างขึ้นให้เองโดยอัตโนมัติ

มีโปรเจกต์ในใจแล้วหรือยัง?

เล่าให้เราฟังเกี่ยวกับโปรเจกต์ใหม่ของคุณ

ติดต่อเราhello@oozou.com
OOZOU Logo

กรุงเทพฯ · สิงคโปร์ · ฮ่องกง

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 อาคารวันซิตี้เซ็นเตอร์
ถนนเพลินจิต
กรุงเทพฯ 10330
ประเทศไทย
+66 2544 0000
hello@oozou.com

บริการ

  • Web Development
  • AI Agents & Generative AI
  • Mobile App Development
  • Data Analytics & Engineering
  • UI/UX & Product Design
  • Digital Transformation

บริษัท

  • เกี่ยวกับเรา
  • ร่วมงานกับเรา
  • บทความ
  • Case Studies
  • Live Demos
  • Today I Learned
  • ติดต่อเรา

เพิ่มเติม

  • อุตสาหกรรม
  • Partner Program
© 2026 OOZOU สงวนลิขสิทธิ์
นโยบายความเป็นส่วนตัวจรรยาบรรณในการทำงานนโยบาย ABAC