2013-04-03 6 views
8

Ich habe bereits einige ausgefeilte FactoryGirl-Factory-Definitionen zum Testen eines Rails-Projekts erstellt, und zu diesem Zweck funktionieren sie gut.Wie können FactoryGirl-Fabriken zum Aufbau einer Entwicklungsdatenbank verwendet werden?

Ich möchte jetzt die gleichen Definitionen mit einem Skript (Ruby, Rake, was auch immer ...) verwenden, um die Rails-Entwicklungsdatenbank mit einer großen Sammlung von gültigen, korrekt zugeordneten Datensätzen zu füllen.

Ich bin sicher, dass dies eine allgemeine Aufgabe ist, aber keine nützliche Referenz finden kann.

Was ist die beste Vorgehensweise? Wie geht es weiter?

Sagen die Fabriken sind in spec/factories.rb. Was als nächstes? Vielen Dank.

aktualisieren

Noch kämpfen. Versucht dies als rake Aufgabe.

require 'factory_girl' 
require 'spec/factories' 

namespace :db do 
    desc "Fill database with trial data" 
    task :populate => :environment do 
    Rake::Task['db:reset'].invoke 
    50.times do |n| 
     # Make a consistent set of related records. 
     team = FactoryGirl.create(:team, :completed) 
     team.members << FactoryGirl.create(:member) 
     FactoryGirl.create(:design, :team => team) 
    end 
    end 
end 

Ach, das kann nicht mein factories.rb finden:

rake aborted! 
cannot load such file -- spec/factories 

Überall sonst ein Projekt Wurzel relativ erfordern Pfad funktioniert gut. Was ist der geheime Händedruck?

+1

Dies ist normalerweise die Arbeit der Seeds-Datei. Gibt es einen Grund, warum du keine Samen verwenden möchtest, um deine DB zu füllen? –

+0

Nie von Samen gehört. Können Sie bitte eine Referenz angeben? (Die meisten Tage lernen Rails scheint wie eine Schnitzeljagd ...) – Gene

+1

@Gene http://railscasts.com/episodes/179-seed-data –

Antwort

1

Wie ich in meinem Kommentar erwähnte, ist dies in der Regel die Arbeit von Seed-Daten. Wenn Sie diese Daten wollen nur in der Entwicklungsdatenbank ausgesät wird, könnten Sie die seed Rake Aufgabe ändern, indem Sie so etwas wie dies zu tun:

namespace :db do 
    task :seed => :environment do 
    env_seed_file = File.join(Rails.root, 'db', 'seeds', "#{Rails.env}.rb") 
    load(env_seed_file) if File.exist?(env_seed_file) 
    end 
end 

, die Ihnen die Möglichkeit geben würde, eine Datei für jede Umgebung (dh db zu erstellen /seeds/development.rb). Sie könnten auch ein Juwel wie seedbank verwenden, das Ihnen umgebungsspezifische Seed-Dateien und ein paar andere Zusätze zu dem gibt, was bereits in Rails ist.

+0

Danke. In der 'samen.rb' Datei, wie Sie gesagt haben, habe ich den vollständigen Umgebungslastpfad für require, also funktionieren FactoryGirl und meine Fabrik defs gut. Ich habe gerade meinen Code in 'if Rails.env == 'development' eingepackt, um sicherzustellen, dass keine zufälligen Datensätze in nicht-Entwicklungsdatenbanken generiert werden. Ich werde später Ihre allgemeinere Lösung verwenden, wenn eine komplexere Anforderung erscheint. – Gene

+0

Ich habe gerade diese Antwort gefunden, während ich suche, wie man Testdaten mit factory_girl erzeugt. Das Seeding einer Datenbank wird normalerweise nicht zum Hinzufügen von Testdaten zu einer Datenbank, sondern zum Initialisieren von Anfangsdatensätzen in Entwicklung und Produktion verwendet. (Siehe [hier] (http://railscasts.com/episodes/179-seed-data?view=asciicast) und [hier] (http://www.xyzpub.com/de/ruby-on-rails/3.2 /seed_rb.html)) –

0

@Gene Sie waren in der Nähe dieses Rätsel zu lösen. Ich denke, du warst einen Weg davon entfernt. Ich verwende keine RSpecs und der Pfad könnte leicht abweichen, aber Sie haben die allgemeine Idee.

Ich präzisiere nur Pfad für die erforderliche Fabrikdatei und ich füge auch den Rake db: seed nach dem Zurücksetzen hinzu.

Der DB-Startwert soll Ihre Datenbank nicht zur Entwicklungszeit füllen, sondern Ihre neue Anwendung mit den richtigen Informationen starten, um normal arbeiten zu können. dh. Erstellen eines Admin-Benutzers und Standardstatus

Verwandte Themen