Frage

Ich versuche, Factory Girl mit Test::Unit und Shoulda in Ruby on Rails einzurichten.Ich habe das Gem installiert, meine Factory-Datei im Verzeichnis test/factories und meine Spezifikationsdatei im Verzeichnis test/models erstellt.Der aktuelle Fehler, den ich erhalte, ist „ArgumentError:Keine solche Fabrik:test‘, was mich vermuten lässt, dass die Datei test_factory.rb nicht geladen wird?Irgendeine Idee, was ich ändern sollte?

Hier sind meine Dateien.

#test/factories/test_factory.rb
Factory.define :test do |t|  
  t.name 'test_spotlight'  
  t.label 'test spotlight label'  
end

Und

#test/modes/test_spec.rb
require 'test_helper'
require 'factory_girl'
class TestTest < Test::Unit::TestCase
  def setup
    @test = Factory.build(:test)
  end

  context "A test" do
    should "save with the minimum requirements" do
      assert @test.save
    end
  end 
end 
War es hilfreich?

Lösung

Ich habe auch auf einem meiner Projekte in dieses Problem. Ich bin nicht sicher genau das, was der Initialisierungscode verursacht übersprungen werden, aber Sie können die Werke Definitionen wie diese Kraft laden:

require 'factory_girl'
Factory.find_definitions

Hope, das hilft.

Andere Tipps

Versuchen Sie, diese in test_helper.rb setzen:

require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
  require factory
end

Just entdeckt factory_girl_rails, wo es heißt, das automatische Laden der einzige zusätzliche Sache ist, es hat https://github.com/ thoughtbot / factory_girl_rails

Ich hatte das gleiche Problem. Schließlich begnügte ich alle meine Fabriken in „/test/factories.rb“ setzen und schreiben Sie die folgenden Zeilen in meinem „/test/test_helper.rb“ file:

require 'factory_girl'
require File.dirname(__FILE__) + "/factories"

Sie könnte das gleiche für mehrere Dateien tun, indem sie in der test_helper erfordern. Ich habe noch nicht herausgefunden, warum die Autos beinhalten, dass in „factory_girl die“ erwähnt werden readme nicht geschieht.

ich es auch geschafft, indem sie diese Linie in meine environment.rb dieses Problem zu beseitigen:

config.gem "factory_girl", :source => "http://gemcutter.org"

Machen Sie auch sicher, dass Sie das neueste Juwel haben:

Name geändert von "thoughtbot-factory_girl" auf "factory_girl", Quelle geändert von „ http: //gems.github. com “auf " http://gemcutter.org ".

Falls Sie hatten dieses Problem mit Ruby 1.9.2, erforderlich erwartet, dass der erweiterte Pfad.

File.expand_path("test/factories.rb")

Das Patch gelöst mein Problem. Ich habe nur eine Pull-Anforderung. Danach können Sie diese zu Ihrem test_helper.rb hinzufügen:

require 'factory_girl'
FactoryGirl.find_definitions

Wenn ich nur 'factory_girl' erforderlich in test_helper.rb, würde ich das gleiche Verhalten erhalten Sie erwähnt haben, doch wenn ich erforderlich, um es in meiner config / test / environment.rb (man beachte ich Umweltschützer ) wäre es richtig, die Fabrik Definition ohne jede Frage.

Ich habe versucht, dies nachdem die Fabrik Mädchen rdoc lesen, wo es heißt config.gem in Ihrer Umgebung zu setzen.

Ich lief auch in das Problem - nach factory auf 1.3.2 zu aktualisieren -., Dass die Fabriken von Test / Fabriken nicht automatisch geladen wurden mehr

I des Problems könnte befreien, indem Sie den Code aus dg in test_helper.rb hinzu:

Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
 require factory
end

Wenn einzelne Tests in Textmate läuft, funktionierte alles in Ordnung, aber läuft z.B. alle Unit-Tests von der Kommandozeile Rake Test: Einheiten mit einem DuplicateDefinitionError fehlgeschlagen (ich gelesen, dass es wahrscheinlich etwas zu tun mit Ruby 1.8.x hat). Also änderte ich leicht den Code:

if (!Factory.factories || Factory.factories.empty?)
  Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
    require factory
  end
end

Haben Sie versucht, das Bewegen des

require 'factory_girl'

Ihren Test / test_helper.rb

Die Fabrik Auto-Lademechanismus kann davon abhängen, wo die das erfordert genannt wird. Man könnte versuchen, Fabriken zu finden * Test / models / Fabriken / ** statt * Test / Fabriken / **

Stattdessen Ihre Fabrik Datei test_factory.rb zu benennen, versuchen die Namensgebung factory.rb

Interessant.Ich hatte ein ähnliches Problem, als ich versuchte, Gurke mit Factory_girl zum Laufen zu bringen.Ursprünglich hatte ich „factory_girl“ so konfiguriert, dass gesucht wird („config.gem“), aber nicht in die Gurkenumgebung geladen und vollständig in „features/support/env.rb“ erforderlich, genau wie „gurke“ für Webrat usw.Das hat erst funktioniert, als ich „factory_girl“ ausdrücklich angewiesen habe, die Definitionen zu finden, wie Kenny oben vorgeschlagen hat.

Als ich die require-Anweisung aus env.rb entfernte und „factory_girl“ in der Gurkenumgebung vollständig benötigte, verschwand der Effekt und „factory_girl“ funktionierte sofort.

Es scheint also wirklich eine Frage zu sein, wann (oder in welchem ​​Kontext) „factory_girl“ geladen wird.

Da verschiedene Menschen verschiedene Versionen von Rails verwenden (2.x und 3.x die gängigste jetzt ist), ist es wichtig, die anderen relevanten Teile Ihrer Umgebung gehören (die wichtigsten sind, welche Version von Rails Sie‘ wieder auf). Von der factory_girl Webseite, Version 1.3.0 Dokumentation (http://rubydoc.info/gems/factory_girl/1.3.0/frames):

  

Wenn Sie mit Rails 3 verwenden factory_girl möchten, verwenden Sie die   factory_girl_rails Juwel, nicht diese.

     

Wenn Sie verwenden möchten factory_girl mit Rails-Versionen vor 3 bis Schienen,   verwenden Version 1.2.4.

Wenn Sie Probleme haben, mit dem Laden, ich würde vorschlagen, dass sichergestellt wird, dass Sie die richtige Version verwenden. Die Versionen von factory_girl größer als 1.2.4, ich würde davon ausgehen, werden als Abhängigkeiten für den ‚factory_girl_rails‘ (Rails 3.0+) gem gebracht.

Ich habe require 'factory_girl' require File.dirname(FILE) + "/factories" spec_helper.rb whiche geholfen, aber dann rememberd ich Spork kann manchmal ba ein bisschen ein Problem, so neu gestartet ich Spork ohne require und es funktionierte dann in Ordnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top