2015-01-29 13 views
7

Alle Links zu Dokumentation, die meine Gedanken hier beweisen oder widerlegen, wären sehr willkommen; Ich kann keine finden.FactoryGirl Factory für Namespace-Klasse

AFAIK, wenn Sie eine Rails-Anwendung mit einem Product Modell hatte, konnte man eine factory Fabrik als

FactoryGirl.define do 
    factory :product do 
    # stuffs 
    end 
end 

definieren und dann Fabrik in Tests rufen Sie mit (RSpec Beispiel)

let(:product) { FactoryGirl.create(:product) } 

Sie können aber auch nennen es mit

let(:product) { FactoryGirl.create(Product) } 

Dies ist hilfreich, wenn Sie Ihre Modelltests ein wenig dynamischer und mit RSpecs described_class Helfern ändern möchten.

Mein Problem:

Ich habe ein Modell bekam die RSpec Namespace

class Namespace::MyModel < ActiveRecord::Base 
    # model stuffs 
end 

mit einer Fabrik

FactoryGirl.define do 
    factory :my_model, class: Namespace::MyModel do 
    # factory stuffs 
    end 
end 

und bei dem Versuch, sich zufällig Helfer zu verwenden ..

RSpec.describe Namespace::MyModel do 
    let(:my_object) { FactoryGirl.create(described_class) } 
    # testing stuffs 
end 

factory klagt über fehlende Fabrik

Factory not registered: Namespace::MyModel 

Bin ich diese Funktion von factory fehlt, ohne seine wahre Bestimmung zu verstehen? Oder gibt es eine andere Möglichkeit, wie ich meine Fabrik richtig auflösen kann?

+0

möglich Duplikat [Mit Fabrik \ _girl \ _rails mit Rspec auf Namespace-Modelle] (http://stackoverflow.com/questions/6349378/using-factory-girl-rails-with-rspec -on-namespaced-models) –

+0

@GregBurghardt Ich weiß, wie man die Fabrik einrichtet und wie von FactoryGirl dokumentiert verwendet. Meine Frage bezieht sich darauf, wie FactoryGirl Klassennamen in Fabriknamen auflöst. –

+1

Für alle, die neugierig sein könnten, habe ich auch ein Problem auf der GitHub-Seite von FactoryGirl eröffnet, um die Meinung des Entwicklerteams zu diesem Thema zu erfahren: https://github.com/thoughtbot/factory_girl/issues/740 –

Antwort

1

Warum versuchen Sie nicht

RSpec.describe Namespace::MyModel do 
    let(:my_object) { FactoryGirl.create(:my_factory) } 
    # testing stuffs 
end 

factory in der Regel von Fabrikname verwendet, aber nicht Klassennamen, dh definiert.

Sie können mehrere Fabriken haben, die Instanzen der gleichen Klasse definieren. Der Unterschied zwischen ihnen kann beispielsweise in Feldwerten liegen.

Oder Sie können den Namen der Fabrik dynamisch aus dem Namen der beschriebenen Klasse abrufen. Es ist bereits beantwortet bei How do you find the namespace/module name programmatically in Ruby on Rails?

+0

Sie sind absolut richtig. Verwenden Sie die Fabrik, wie Sie beschrieben, funktioniert gut. Ich habe das gemacht. Worauf ich neugierig bin, ist, ob ich einen Namensklassennamen an FactoryGirl übergeben und ihn in eine Factory auflösen kann, die für diese Klasse definiert ist. –

Verwandte Themen