2013-10-10 18 views
13

ich mit einer Struktur an einem Projekt arbeiten, wie:factory: Fabrik nicht registriert

projects/warehouse/core 
projects/warehouse/products/bottles 
projects/warehouse/products/boxes 

In diesem Projekt die Anwendungslogik, Edelsteine, usw. sind alle in der core Anwendung. Ich habe boxes für rspec wie so ein:

projects/warehouse/products/boxes/spec 
    /factories 
    /models 

Das factories Verzeichnis enthält cubics.rb:

FactoryGirl.define do 
    factory :cubic 
    id 1 
    dimension 12 
    end 
end 

Das models Verzeichnis enthält cubic_spec.rb:

require 'spec_helper' 

describe Boxes::Cubic do 
    it "has a valid factory" do 
    FactoryGirl.create(:cubic).should be_valid 
    end 
end 

Das Cubic Modell ist in products/boxes/app/models/boxes/cubic.rb befindet .

module Boxes 
    class Cubic < BoxExBase 
    self.table_name = 'containers' 
    #validation stuff goes here 
    end 
end 

Einfach und unkompliziert. Wenn ich rspec ../products/boxes/spec/models/cubic_spec.rb ausführen bekomme ich den ArgumentError: Factory nicht registriert: kubisch. Ich habe versucht, factory_girl_rails im spec_helper.rb zu verlangen. Ich habe versucht, die spec_helper.rb Modifizierung w/

FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories') 
FactoryGirl.find_definitions 

Die gemfile im core enthält gem 'factory_girl_rails' in der Entwicklung, Testgruppen. Ich habe sogar versucht, die Fabrik dazu zu bringen, einen Fehler zu melden, aber das passiert nicht einmal. Daher scheint die Fabrik nicht einmal geladen zu werden. Was muss ich tun, um diese Fabrik zu laden und zu registrieren?

Antwort

0

2 Dinge können Sie versuchen:

  • die gem 'factory_girl_rails' innerhalb der boxes App setzen
  • erstellen Probe rspec innerhalb des Kerns mit Fabrik und führen Sie es

Ich denke, Ihre boxes App doesn lade die Edelsteine ​​nicht aus dem Kern, es lädt nur die Geschäftslogik

+0

Vielen Dank! Ich werde das hier ein bisschen geben. Ich wurde für den Moment neu verwendet. – CitizenX

+0

Ich entschuldige mich für die Verzögerung, aber die Edelstein in die Boxen App hat keine Auswirkungen. rspec arbeitet im Kern, wenn eine Factory verwendet wird. – CitizenX

+0

Welchen Fehler haben Sie bekommen, wenn Sie den Edelstein in die 'Box' App gelegt haben? gleicher Fehler 'FactoryNotRegistered'? –

11

So haben wir es geschafft. Als @Vinh Tran vorgeschlagen, factory_girl_rails im Gemfile der App sein muss, die Sie auf als solche arbeiten:

group :development, :test do 
    gem 'rspec-rails' 
    gem 'factory_girl_rails' 
end 

Zusätzlich muss die Dummy-App unter dem /spec Verzeichnis befinden, obwohl diese Punkt, es scheint nicht mit tatsächlichen Modellen usw. bestückt zu sein.

Schließlich muss der Befehl rspec aus dem Verzeichnis boxes im Gegensatz zu core Verzeichnis ausgestellt werden. All diese Dinge haben es uns ermöglicht, eine Fabrik erfolgreich zu registrieren und erfolgreiche Testläufe zu haben.

13

Sie müssen die Dummy-App (oder die Rails-Konsole) aushelfen, da FactoryGirl in Rails.root suchen wird, was spec/dummy ist.

also von einer Konsole in spec/Dummy zum Beispiel hat gerade dies zu tun:

FactoryGirl.definition_file_paths = %w(../factories) 
FactoryGirl.find_definitions 
# You can use this line to see what factories are loaded 
# FactoryGirl.factories 

Für Ihren speziellen Fall, Sie werden die tatsächlichen Positionen ändern müssen, aber wo Sie sind, wenn isn factory Ich finde deine Fabriken nicht, weil sie nicht wissen, wo sie suchen sollen.

Um genau zu sein: Hier ist was ich getan habe. Meine Bedürfnisse waren wie folgt - ich musste rspec aus dem Gem Root-Verzeichnis ausführen. Aber ich muss auch in der Lage sein, die Rails-Konsole über das eingebettete Dummy-Projekt auszuführen und auf Factory-Girl zuzugreifen, damit während der Entwicklung ein Testobjekt erstellt werden kann.

TLDR Fügen Sie diesen Code in Ihre Dummy application.rb App

console do 
    FactoryGirl.definition_file_paths << Pathname.new("../factories") 
    FactoryGirl.definition_file_paths.uniq! 
    FactoryGirl.find_definitions 
end 

├── spec 
│   ├── dummy 
│   │   ├── app 
│   │   ├── bin 
│   │   ├── config 
│   │   │   ├── environments 
│   │   │   ├── initializers 
│   │   │   ├── locales 
│   │   │   ├── application.rb << This is the file to add the lines in. 

Die releveant Bits meiner Anwendung Layout sieht aus wie

├── app 
├── bin 
├── config 
├── lib 
├── spec 
│   ├── dummy 
│   │   ├── app 
│   │   ├── bin 
│   │   ├── config 
│   │   │   ├── environments 
│   │   │   ├── initializers 
│   │   │   ├── locales 
│   │   │   ├── application.rb 
│   │   │   ├── boot.rb 
│   │   │   ├── database.yml 
│   │   │   ├── environment.rb 
│   │   │   └── routes.rb 
... 
│   ├── factories 
│   │   └── models 
│   │    └── api_requests.rb 
│   ├── lib 
│   │   ├── controllers 
│   │   │   ├── controller_spec.rb 
│   │   │   └── session__spec.rb 
│   │   └── my_spec.rb 
│   ├── support 
│   └── vcr 
│   ├── spec_helper.rb 

├── Gemfile 
├── Gemfile.lock 
├── mygem.gemspec << this is the file to include the factory-girl-rails gem 

ich die Fabrik-Mädchen einschließlich bin - Geländer nur in meiner Gemspec und nur an dieser Stelle. Nichts in meinem Gemfile und nichts in der Gemfile für die Dummy-App.

0

Ich habe das, wenn meine Spezifikation nicht mit _spec.rb endete. RubyMine hat den Komponententest ohne Probleme ausgeführt, und alles funktionierte außer für Factory Girl.

Verwandte Themen