คุณใช้ FactoryBot กับ model ที่ไม่ใช่ ActiveRecord ได้
คุณสามารถใช้เมธอด 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 ในไดเรกทอรี config/initializers ในไฟล์นี้คุณสามารถกำหนดการตั้งค่าของ factory_bot เช่น path ของ factory และ strategy เริ่มต้น
กำหนด model และ factory
ใน FactoryBot factory คือพิมพ์เขียวสำหรับสร้าง object คุณสามารถกำหนด factory ให้กับ model ได้โดยสร้างไฟล์ในไดเรกทอรี factories ตัวอย่างเช่น ถ้าคุณมี model ชื่อ User คุณสามารถสร้างไฟล์ user.rb ในไดเรกทอรี factories เพื่อกำหนด factory ของ user ในไฟล์นี้คุณสามารถกำหนด attribute และ association ของ factory user ได้
ตัวเลือกและ attribute ของ factory
FactoryBot มีตัวเลือกและ attribute หลายอย่างให้คุณใช้ปรับแต่ง factory ของตัวเอง ตัวอย่างเช่น คุณสามารถใช้ attribute ชื่อ class เพื่อระบุ class ของ object ที่จะสร้าง ใช้ตัวเลือก attributes เพื่อกำหนด attribute ของ factory และยังใช้ตัวเลือก association เพื่อกำหนดความสัมพันธ์ระหว่าง factory ได้อีกด้วย
สรุป
โดยสรุป FactoryBot เป็นเครื่องมือทรงพลังสำหรับสร้าง test fixture ในแอปพลิเคชัน Rails การกำหนด factory ให้กับ model ของคุณช่วยให้สร้างข้อมูลทดสอบได้อย่างรวดเร็วและมีประสิทธิภาพ ด้วยตัวเลือกการตั้งค่าที่ยืดหยุ่นและ attribute ที่ปรับแต่งได้ FactoryBot ทำให้การเขียนและดูแล test เป็นเรื่องง่าย ทำตาม best practice ที่กล่าวถึงในบทความนี้ แล้วคุณจะได้ประโยชน์สูงสุดจาก FactoryBot และยกระดับคุณภาพของ test ของคุณ