Domanda

Sto cercando di impostare Factory Girl con Test :: Unit e Shoulda in Ruby on Rails. Ho installato il gioiello, creato il mio file fabbrica nella directory test / fabbriche, e ha creato il mio file spec nella directory test / modelli. L'errore corrente che sto ricevendo è 'ArgumentError: Nessun fabbrica: test', il che mi porta a credere che il file test_factory.rb non viene caricata? Qualsiasi idea di che cosa dovrei cambiare?

Qui ci sono 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 
È stato utile?

Soluzione

Ho eseguito in questo problema su uno dei miei progetti troppo. Non sono sicuro esattamente ciò che sta causando il codice di inizializzazione da saltare ma è possibile imporre caricare le definizioni di fabbrica in questo modo:

require 'factory_girl'
Factory.find_definitions

Spero che questo aiuti.

Altri suggerimenti

Prova a mettere questo in test_helper.rb:

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

factory_girl_rails appena scoperto, dove si dice il caricamento automatico è l'unica cosa in più che ha https://github.com/ thoughtbot / factory_girl_rails

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, imponendo loro in test_helper. Non ho ancora capito perché l'auto-comprende che è menzionato nel readme "di factory_girl" non accade.

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

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

Assicurarsi inoltre di avere l'ultima gemma:

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

Nel caso in cui hai avuto questo problema con Ruby 1.9.2, richiedere si aspetta che il percorso ampliato.

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

cerotto 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

Se avevo bisogno solo 'factory_girl' in test_helper.rb, vorrei avere lo stesso comportamento che lei ha citato, ma se ho richiesto nel mio config / test / environment.rb (nota io uso ambientalista ) sarebbe corretto trovare la definizione di fabbrica senza alcun problema.

Ho provato questo dopo aver letto il rdoc Factory Girl in cui si dice di mettere config.gem nel proprio ambiente.

Ho anche incontrato il 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

Quando l'esecuzione di test singoli in TextMate, tutto ha funzionato bene, ma in esecuzione per esempio tutti i test di unità dalla riga di comando utilizzando il test rastrello: unità non riuscita con un DuplicateDefinitionError (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

Hai provato a spostare il

require 'factory_girl'

al test / test_helper.rb

Il meccanismo di auto-caricamento fabbrica può dipendere da dove il il bisogno si chiama. Si potrebbe cercare di trovare le fabbriche * Test / modelli / fabbriche / ** * invece di test / fabbriche / **

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

Interessante. Ho avuto un problema simile cercando di ottenere il cetriolo a lavorare con factory_girl. Avevo inizialmente configurato factory_girl da ricercarsi ( 'config.gem'), ma non caricato nell'ambiente cetriolo e pienamente richiesta in 'funzioni / supporto / env.rb', stessa cetriolo fa per Webrat, ecc Che solo ha iniziato a lavorare quando ho detto esplicitamente factory_girl per trovare le sue definizioni come Kenny suggerito sopra.

Quando ho rimosso il richiedono dichiarazione env.rb e factory_girl pienamente richieste nell'ambiente cetriolo, l'effetto è andato via e factory_girl lavorato fuori dalla scatola.

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

Dal momento che diverse persone stanno utilizzando diverse versioni di Rails (2.xe 3.x è il più comune oggi), è importante includere gli altri pezzi pertinenti del vostro ambiente (l'essere più importante quale versione di Rails si' ri su). Dalla pagina factory_girl web, la versione 1.3.0 documentazione (http://rubydoc.info/gems/factory_girl/1.3.0/frames):

  

Se si desidera utilizzare factory_girl con Rails 3, utilizzare il   factory_girl_rails gioiello, non questo.

     

Se si desidera utilizzare factory_girl con le versioni precedenti Rails a Rails 3,   utilizzare la versione 1.2.4.

Se hai problemi con il carico, io suggerirei di fare in modo che si sta utilizzando la versione corretta. Le versioni di factory_girl superiore a 1.2.4, mi piacerebbe pensare, sono portati come dipendenze per il 'factory_girl_rails' (Rails 3.0+) gemma.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top