Bagaimana cara menggunakan pabrik dari FactoryGirl di konsol rel

91

Saya menggunakan konsol rel di lingkungan pengembangan dan saya ingin menggunakan pabrik. Bagaimana saya bisa mengaksesnya?

Saya telah mencoba require "FactoryGirl"pengembalian yang mana

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
sumber
Sebuah sederhana google pencarian mengakibatkan beberapa hasil. Sudahkah kamu mencobanya? Apakah mereka tidak bekerja? Apa yang sudah kamu coba sejauh ini?
wpp
1
Ini semua dalam pengujian, saya ingin melakukannya dalam pengembangan
Eric Baldwin
2
Anda mungkin ingin memulai dengan 'factory_girl' daripada membutuhkan konstanta FactoryGirl.
Rob Dawson
1
menyesuaikan untuk waktu saat ini - Anda dapat mulai rails ckemudian melakukanrequire 'factory_bot'
RudyOnRails

Jawaban:

39

Untuk mengatasi masalah ini, pastikan bahwa permata bot pabrik ditentukan dalam Gemfile Anda yang serupa dengan ini

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

Lalu bundle install.

Ini akan membuat kelas FactoryBot tersedia di konsol pengembangan.

Semoga ini membantu.

daging kambing
sumber
2
Menambahkan FactoryGirl di gemfile seperti ini alih-alih gem 'factory_girl_rails', :require => falseakan menimbulkan kesalahan bagi siapa pun yang mencoba menyiapkan lingkungan pengembangan dari awal, berhati-hatilah.
Epigene
4
Jawaban ini berfungsi, tetapi jawaban yang diterima seharusnya rails console test, ini akan memungkinkan Anda untuk membuat konsol di lingkungan pengujian sehingga Anda tidak perlu memperbarui Gemfile Anda untuk menggunakan paket pengujian di lingkungan pengembangan
Dylan Pierce
199

Saya melakukan ini dengan cara berikut:

  • Mulai konsol rel di lingkungan pengujian dalam mode kotak pasir.

    rails console -e test --sandbox
    

Anda memerlukan ini karena dua alasan:

  1. Setiap perubahan yang Anda lakukan akan dibatalkan.
  2. Jika Anda sudah memiliki beberapa data benih, mungkin terjadi bahwa pabrik akan memulai serialisasi atribut dari 1, tetapi catatan ini mungkin sudah ada.

Kemudian di konsol:

  • Membutuhkan FactoryBot (disebut FactoryGirl):

    require 'factory_bot'
    
  • Muat definisi pabrik:

    FactoryBot.find_definitions
    
  • Sertakan metode FactoryBot untuk menghindari awalan semua panggilan ke FB dengan FactoryBot( createbukan FactoryBot.create):

    include FactoryBot::Syntax::Methods
    

PS Untuk permata fabrikasi Anda dapat memuat definisi di konsol rel dengan:

Fabrication.manager.load_definitions

Juga require 'faker'jika Anda menggunakannya.

Alexander
sumber
Haruskah baris terakhir itu require 'ffaker'?
Dihedral
Itu tergantung pada gem yang Anda gunakan - faker atau ffaker, tetapi saya setuju bahwa ffaker belakangan ini lebih banyak digunakan.
Alexander
Saya telah menghadapi fixture_file_uploadmasalah metode yang tidak ditentukan , yang disebabkan oleh tidak adanya ActionDispatch::TestProcessmodul, jadi Anda dapat mempertimbangkan untuk menyertakannya juga
divideByZero
1
Jika Anda sering merestart konsol, inilah satu require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
kalimatnya
2
Untuk Rails 6.0 jalankan konsol seperti ini:rails c -e test --sandbox
David Morales
26

Anda perlu require 'factory_bot_rails', yang merupakan permata sebenarnya yang digunakan oleh Rails. Permata itu akan mencakup pustaka Bot Pabrik, pembuatanFactoryBot tersedia.

Anda dapat melakukan ini, atau memperbarui Gemfile Anda agar membutuhkannya saat startup seperti dalam jawaban muttonlamb.

Robin Daugherty
sumber
Karena saya menggunakan Faker di pabrik saya, saya juga harus menjalankannya require 'faker'.
albertski