ฉันจะใช้โรงงานจาก FactoryGirl ในคอนโซลรางได้อย่างไร


92

ฉันใช้คอนโซลรางในสภาพแวดล้อมการพัฒนาและฉันต้องการใช้โรงงาน ฉันจะเข้าถึงได้อย่างไร?

ฉันได้ลองแล้วrequire "FactoryGirl"ซึ่งผลตอบแทน

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl

การ ค้นหาโดยGoogle ง่ายๆ นำไปสู่ผลลัพธ์หลายประการ คุณลองสิ่งเหล่านี้แล้วหรือยัง? พวกเขาไม่ทำงาน? คุณได้ลองทำอะไรมาบ้าง?
wpp

1
ทั้งหมดนี้อยู่ในการทดสอบฉันต้องการที่จะพัฒนา
Eric Baldwin

2
คุณอาจต้องการเริ่มต้นด้วยความต้องการ 'factory_girl' แทนที่จะต้องการค่าคงที่ FactoryGirl
Rob Dawson

1
ปรับตามเวลาปัจจุบัน - คุณสามารถเริ่มได้rails cจากนั้นทำrequire 'factory_bot'
RudyOnRails

คำตอบ:


39

เพื่อแก้ปัญหานี้ให้แน่ใจว่าอัญมณีบอทโรงงานถูกระบุไว้ใน Gemfile ของคุณคล้ายกับสิ่งนี้

group :development, :test do
  gem 'factory_bot_rails'
end

แล้วbundle install.

สิ่งนี้ควรทำให้คลาส FactoryBot พร้อมใช้งานในคอนโซลการพัฒนา

หวังว่านี่จะช่วยได้


2
การเพิ่ม FactoryGirl ใน gemfile เช่นนี้แทนที่จะgem 'factory_girl_rails', :require => falseทำให้เกิดข้อผิดพลาดสำหรับทุกคนที่พยายามตั้งค่าสภาพแวดล้อมการพัฒนาตั้งแต่เริ่มต้นโปรดระวัง
Epigene

4
คำตอบนี้ใช้ได้ผล แต่คำตอบที่ได้รับการยอมรับควรrails console testจะช่วยให้คุณสร้างคอนโซลในสภาพแวดล้อมการทดสอบดังนั้นคุณไม่จำเป็นต้องอัปเดต Gemfile เพื่อใช้แพ็คเกจทดสอบในสภาพแวดล้อมการพัฒนา
Dylan Pierce

200

ฉันทำวิธีต่อไปนี้:

  • เริ่มคอนโซลรางในสภาพแวดล้อมการทดสอบในโหมดแซนด์บ็อกซ์

    rails console -e test --sandbox
    

คุณต้องการสิ่งนี้ด้วยเหตุผลสองประการ:

  1. การเปลี่ยนแปลงใด ๆ ที่คุณทำจะถูกยกเลิก
  2. หากคุณมีข้อมูลเมล็ดพันธุ์อยู่แล้วอาจเกิดขึ้นได้ว่าโรงงานต่างๆจะเริ่มการทำให้อนุกรมของแอตทริบิวต์จาก 1 แต่อาจมีบันทึกเหล่านี้อยู่

จากนั้นในคอนโซล:

  • ต้องการ FactoryBot (ถูกเรียกว่า FactoryGirl):

    require 'factory_bot'
    
  • โหลดคำจำกัดความของโรงงาน:

    FactoryBot.find_definitions
    
  • รวมวิธีการ FactoryBot เพื่อหลีกเลี่ยงการนำหน้าการโทรไปยัง FB ทั้งหมดด้วยFactoryBot( createแทนFactoryBot.create):

    include FactoryBot::Syntax::Methods
    

PS สำหรับการประดิษฐ์อัญมณีคุณสามารถโหลดคำจำกัดความในคอนโซลรางด้วย:

Fabrication.manager.load_definitions

นอกจากนี้require 'faker'หากคุณใช้มัน


บรรทัดสุดท้ายควรเป็นrequire 'ffaker'อย่างไร
Dihedral

ขึ้นอยู่กับอัญมณีที่คุณใช้ - faker หรือ ffaker แต่ฉันยอมรับว่าเมื่อเร็ว ๆ นี้ ffaker มีการใช้กันอย่างแพร่หลายมากขึ้น
Alexander

ฉันประสบfixture_file_uploadปัญหาเกี่ยวกับวิธีการที่ไม่ได้กำหนดซึ่งเกิดจากการไม่มีActionDispatch::TestProcessโมดูลดังนั้นคุณอาจพิจารณารวมไว้ด้วย
DivideByZero

1
หากคุณรีสตาร์ทคอนโซลrequire "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
บ่อยครั้ง

2
สำหรับ Rails 6.0 ให้รันคอนโซลดังนี้rails c -e test --sandbox
David Morales

26

คุณต้องrequire 'factory_bot_rails'ซึ่งเป็นอัญมณีจริงที่ Rails ใช้ อัญมณีนั้นจะรวมไลบรารี Factory Bot ไว้ให้FactoryBotพร้อมใช้งาน

คุณสามารถทำได้หรืออัปเดต Gemfile เพื่อต้องการใช้เมื่อเริ่มต้นเช่นเดียวกับคำตอบของเนื้อแกะ


เนื่องจากฉันใช้ Faker ในโรงงานของฉันฉันจึงต้องวิ่งrequire 'faker'ด้วย
albertski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.