2009-07-21 13 views
16

Sto provando a configurare Factory Girl con Test :: Unit e Shoulda in Ruby on Rails. Ho installato la gemma, creato il mio file factory nella directory test/factories e creato il mio file spec nella directory test/models. L'errore corrente che sto ottenendo è "ArgumentError: No such factory: test", che mi porta a credere che il file test_factory.rb non venga caricato? Qualche idea su cosa dovrei cambiare?Setup Factory Girl with Test :: Unit and Shoulda

Ecco i miei file.

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

e

#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 

risposta

40

I ho incontrato questo problema anche su uno dei miei progetti. Non sono sicuro esattamente ciò che sta causando il codice di inizializzazione da saltare ma è possibile imporre caricare i predefinite di fabbrica di questo tipo:

require 'factory_girl' 
Factory.find_definitions 

Spero che questo aiuti.

+1

Questo ha funzionato per me inserendolo nel mio file 'test_helper.rb'. Mi sono imbattuto in questo mentre usavo factory_girl 1.3.3, rails 2.3.11, ruby ​​1.8.7, e bundler 1.0.10 – Sukima

+0

Questo funziona anche per Rails 3.0.5 e Ruby 1.9.2p180 – Nikhil

+0

Worked for me rail 3.0.9 while doing railstutorial. Inserito nel mio file user_helper. – LondonGuy

0

Hai provato spostando il

require 'factory_girl' 

al tuo test/test_helper.rb?

Il meccanismo di caricamento automatico in fabbrica può dipendere dal punto in cui viene richiamata la richiesta. Si potrebbe cercare di trovare le fabbriche * Test/modelli/fabbriche/** * invece di test/fabbriche/**

0

Invece di chiamare il vostro file di test_factory.rb fabbrica, cercano chiamandolo factory.rb

+0

i documenti dicono che qualsiasi file .rb sotto la directory test/factories dovrebbe essere caricato – brad

2

Ho avuto lo stesso problema. Alla fine ho fatto fare mettendo tutte le mie fabbriche in "/test/factories.rb" e scrivere le seguenti righe nel mio file "/test/test_helper.rb":

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

si potrebbe fare la stessa cosa per più file richiedendoli nel test_helper. Non ho ancora capito perché l'auto-inclusione menzionata nel readme di "factory_girl" non avvenga.

1

Se avessi richiesto 'factory_girl' solo in test_helper.rb, avrei ottenuto lo stesso comportamento che hai menzionato, ma se lo avessi richiesto nel mio config/test/environment.rb (nota che uso environmentalist) troverei correttamente il Definizione di fabbrica senza alcun problema.

Ho provato questo dopo aver letto la rdoc di fabbrica dove dice di mettere config.gem nel proprio ambiente.

3

Prova a mettere questo in test_helper.rb:

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

Sono anche riuscito a sbarazzarsi di questo problema mettendo questa linea nella mia environment.rb:

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

anche assicurarsi hai l'ultima gemma:

Nome cambiato da "thoughtbot-factory_girl" a "factory_girl", fonte modificata da "http://gems.github.com" a "http://gemcutter.org".

0

Interessante.Ho avuto un problema simile cercando di far lavorare cetriolo con factory_girl. Inizialmente avevo configurato factory_girl da cercare ('config.gem') ma non caricato nell'ambiente cetriolo e completamente richiesto in 'features/support/env.rb', come cetriolo per webrat, ecc. lavoro quando ho detto esplicitamente a factory_girl di trovare le sue definizioni come suggerito da Kenny sopra.

Quando ho rimosso l'istruzione require da env.rb e completamente richiesto factory_girl nell'ambiente cetriolo, l'effetto è andato via e factory_girl ha lavorato fuori dalla scatola.

Quindi sembra davvero una questione di quando (o in quale contesto) factory_girl viene caricato.

2

Se si è verificato questo problema con Ruby 1.9.2, richiede prevede il percorso espanso.

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

Questo patch ha risolto il mio problema. Ho appena inviato una richiesta di pull. Dopo di che è possibile aggiungere questo al vostro test_helper.rb:

require 'factory_girl' 
FactoryGirl.find_definitions 
1

ho anche eseguito nel problema - dopo l'aggiornamento a 1.3.2 factorygirl - che le fabbriche di test/fabbriche non sono stati caricati automaticamente più.

ho potuto sbarazzarsi del problema aggiungendo il codice della DG in test_helper.rb:

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

Durante l'esecuzione di test singoli in TextMate, tutto ha funzionato bene, ma in esecuzione per esempio tutti i test unitari dalla riga di comando usando il rake test: unità fallite con un errore DuplicateDefinition (ho letto che probabilmente ha qualcosa a che fare con ruby ​​1.8.x). Così ho un po 'cambiato il codice:

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

Ho avuto lo stesso identico problema. Grazie! – deb

0

Dal momento che diverse persone stanno utilizzando diverse versioni di Rails (2.x e 3 .x è il più comune ora), è importante includere gli altri pezzi pertinenti del tuo ambiente (il più importante è quale versione di Rails sei attiva). Dalla pagina web factory_girl, versione 1.3.0 documentazione (http://rubydoc.info/gems/factory_girl/1.3.0/frames):

If you want to use factory_girl with Rails 3, use the factory_girl_rails gem, not this one.

If you want to use factory_girl with Rails versions prior to Rails 3, use version 1.2.4.

Se hai problemi con il carico, Ti suggerisco di assicurarti di utilizzare la versione giusta. Presumibilmente, le versioni di factory_girl superiori alla 1.2.4 sono introdotte come dipendenze per la gemma "factory_girl_rails" (Rails 3.0+).

0

ho aggiunto require 'factory_girl' require File.dirname(FILE) + "/factories" a spec_helper.rb whiche aiutato, ma poi ho Rememberd Spork può a volte ba un po 'un problema, così ho riavviato Spork senza la require e poi ha funzionato bene.

Problemi correlati