Làm cách nào để sử dụng các nhà máy từ FactoryGirl trong bảng điều khiển rails


90

Tôi đang sử dụng bảng điều khiển rails trong môi trường phát triển và tôi muốn sử dụng các nhà máy. Tôi có thể truy cập chúng bằng cách nào?

Tôi đã thử require "FactoryGirl"mà trả lại

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

Một tìm kiếm google đơn giản dẫn đến một số kết quả. Bạn đã thử những thứ này chưa? Họ không hoạt động? Bạn đã thử những gì cho đến nay?
wpp

1
Đây là tất cả trong thử nghiệm, tôi muốn làm điều đó trong phát triển
Eric Baldwin

2
bạn có thể muốn bắt đầu với một 'factory_girl' hơn là yêu cầu hằng số FactoryGirl.
Rob Dawson

1
điều chỉnh cho thời gian hiện tại - bạn có thể bắt đầu rails csau đó thực hiệnrequire 'factory_bot'
RudyOnRails

Câu trả lời:


39

Để giải quyết vấn đề này, hãy đảm bảo rằng gem của bot nhà máy được chỉ định trong Gemfile của bạn tương tự như thế này

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

Sau đó bundle install.

Điều này sẽ làm cho lớp FactoryBot có sẵn trong bảng điều khiển phát triển.

Hi vọng điêu nay co ich.


2
Việc thêm FactoryGirl vào gemfile như thế này thay vì gem 'factory_girl_rails', :require => falsesẽ tạo ra lỗi cho bất kỳ ai đang cố gắng thiết lập môi trường phát triển từ đầu, hãy cẩn thận.
Epigene

4
Câu trả lời này tác phẩm, nhưng câu trả lời được chấp nhận nên rails console test, nó sẽ cho phép bạn tạo ra một giao diện điều khiển trong môi trường thử nghiệm, do đó bạn không cần phải cập nhật Gemfile bạn để sử dụng một gói phần mềm thử nghiệm trong môi trường phát triển
Dylan Pierce

195

Tôi làm điều này theo cách sau:

  • Khởi động bảng điều khiển rails trong môi trường thử nghiệm ở chế độ hộp cát.

    rails console -e test --sandbox

Bạn cần điều này vì hai lý do:

  1. Bất kỳ thay đổi nào bạn thực hiện đều được khôi phục.
  2. Nếu bạn đã có một số dữ liệu hạt giống, có thể xảy ra trường hợp các nhà máy sẽ bắt đầu tuần tự hóa các thuộc tính từ 1, nhưng các bản ghi này có thể đã tồn tại.

Sau đó, trong bảng điều khiển:

  • Yêu cầu FactoryBot (được gọi là FactoryGirl):

    require 'factory_bot'
  • Tải các định nghĩa của nhà máy:

    FactoryBot.find_definitions
  • Bao gồm các phương thức FactoryBot để tránh đặt trước tất cả các cuộc gọi đến FB bằng FactoryBot( createthay vì FactoryBot.create):

    include FactoryBot::Syntax::Methods

PS Đối với đá quý chế tạo, bạn có thể tải các định nghĩa trong bảng điều khiển rails với:

Fabrication.manager.load_definitions

Ngoài ra require 'faker'nếu bạn sử dụng nó.


Dòng cuối cùng có nên require 'ffaker'không?
Ngày

Nó phụ thuộc vào việc bạn sử dụng viên ngọc nào - faker hay ffaker, nhưng tôi đồng ý rằng gần đây ffaker được sử dụng rộng rãi hơn.
Alexander

Tôi đã phải đối mặt với phương pháp xác định fixture_file_uploadvấn đề, đó là do sự vắng mặt của ActionDispatch::TestProcessmô-đun, vì vậy bạn có thể xem xét bao gồm nó cũng
divideByZero

1
Nếu bạn đang khởi động lại bảng điều khiển nhiều lần, thì đây là một phần mềm:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318,

2
Đối với Rails 6.0 chạy giao diện điều khiển như thế này:rails c -e test --sandbox
David Morales

26

Bạn cần require 'factory_bot_rails', đó là gem thực sự đang được sử dụng bởi Rails. Đá quý đó sẽ bao gồm thư viện Factory Bot, FactoryBotcó sẵn.

Bạn có thể thực hiện việc này hoặc cập nhật Gemfile của bạn để yêu cầu nó khi khởi động như trong câu trả lời của muttonlamb.


Vì tôi đang sử dụng Faker trong các nhà máy của mình, nên tôi cũng phải chạy require 'faker'.
albertski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.