Wie verwende ich Fabriken von FactoryGirl in der Schienenkonsole?

90

Ich verwende die Rails-Konsole in der Entwicklungsumgebung und möchte Fabriken verwenden. Wie kann ich darauf zugreifen?

Ich habe versucht, require "FactoryGirl"welche zurückkehrt

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
quelle
Eine einfache Google- Suche führte zu mehreren Ergebnissen. Hast du diese ausprobiert? Arbeiten sie nicht Was hast du bisher versucht?
wpp
1
Diese sind alle im Test, ich möchte es in der Entwicklung tun
Eric Baldwin
2
Sie möchten wahrscheinlich mit einem erforderlichen 'factory_girl' beginnen, anstatt die FactoryGirl-Konstante zu benötigen.
Rob Dawson
1
Anpassung an die aktuellen Zeiten - Sie können rails cdann beginnenrequire 'factory_bot'
RudyOnRails

Antworten:

39

Um dieses Problem zu lösen, stellen Sie sicher, dass der Factory-Bot-Edelstein in Ihrem Gemfile ähnlich wie dieser angegeben ist

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

Dann bundle install.

Dadurch sollte die FactoryBot-Klasse in der Entwicklungskonsole verfügbar sein.

Hoffe das hilft.

Hammelfleisch
quelle
2
Das Hinzufügen von FactoryGirl in gemfile wie diesem gem 'factory_girl_rails', :require => falseführt zu Fehlern für alle, die versuchen, die Entwicklungsumgebung von Grund auf neu einzurichten.
Epigene
4
Diese Antwort funktioniert, aber die akzeptierte Antwort sollte lauten rails console test: Sie können eine Konsole in der Testumgebung erstellen, sodass Sie Ihre Gemfile nicht aktualisieren müssen, um ein Testpaket in der Entwicklungsumgebung zu verwenden
Dylan Pierce
193

Ich mache das folgendermaßen:

  • Starten Sie die Rails-Konsole in der Testumgebung im Sandbox-Modus.

    rails console -e test --sandbox

Sie benötigen dies aus zwei Gründen:

  1. Alle Änderungen, die Sie vornehmen, werden rückgängig gemacht.
  2. Wenn Sie bereits einige Startdaten haben, kann es vorkommen, dass die Fabriken die Serialisierung von Attributen ab 1 starten, diese Datensätze jedoch möglicherweise bereits vorhanden sind.

Dann in der Konsole:

  • Benötige FactoryBot (hieß FactoryGirl):

    require 'factory_bot'
  • Laden Sie die Factory-Definitionen:

    FactoryBot.find_definitions
  • Fügen Sie die FactoryBot-Methoden hinzu, um zu vermeiden, dass allen Aufrufen von FB FactoryBot( createanstelle von FactoryBot.create) Folgendes vorangestellt wird :

    include FactoryBot::Syntax::Methods

PS Für die Herstellung von Edelsteinen können Sie die Definitionen in die Schienenkonsole laden mit:

Fabrication.manager.load_definitions

Auch require 'faker'wenn Sie es benutzen.

Alexander
quelle
Sollte diese letzte Zeile sein require 'ffaker'?
Dieder
Es hängt davon ab, welchen Edelstein Sie verwenden - Fälscher oder Faker, aber ich stimme zu, dass Faker in letzter Zeit häufiger verwendet wird.
Alexander
Ich habe ein undefiniertes Methodenproblem fixture_file_uploadfestgestellt, das durch das Fehlen eines ActionDispatch::TestProcessModuls verursacht wurde. Sie können es also auch in Betracht ziehen
dividierenByZero
1
Wenn Sie die Konsole häufig neu starten, ist hier ein require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Einzeiler
2
Für Rails 6.0 führen Sie die Konsole wie rails c -e test --sandbox
David Morales
26

Sie müssen require 'factory_bot_rails', welches der eigentliche Edelstein ist, der von Rails verwendet wird. Dieses Juwel wird die Factory Bot-Bibliothek enthalten, die zur FactoryBotVerfügung gestellt wird.

Sie können dies entweder tun oder Ihre Gemfile so aktualisieren, dass sie beim Start wie in der Antwort von Hammellamb erforderlich ist.

Robin Daugherty
quelle
Da ich Faker in meinen Fabriken verwendete, musste ich auch rennen require 'faker'.
Albertski