2009-07-21 17 views
16

Estoy intentando configurar Factory Girl con Test :: Unit y Shoulda en Ruby on Rails. He instalado la gema, he creado mi archivo de fábrica en el directorio de pruebas/fábricas y he creado mi archivo de especificaciones en el directorio de pruebas/modelos. El error actual que estoy obteniendo es 'ArgumentError: No such factory: test', lo que me lleva a pensar que el archivo test_factory.rb no se está cargando. ¿Alguna idea de lo que debería cambiar?Setup Factory Girl with Test :: Unit and Shoulda

Aquí están mis archivos.

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

y

#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 

Respuesta

40

I Me encontré con este problema en uno de mis proyectos también. No estoy seguro exactamente lo que está causando el código de inicialización que se omita pero se puede forzar a cargar las definiciones de fábrica como esta:

require 'factory_girl' 
Factory.find_definitions 

Espero que esto ayude.

+1

Esto funcionó para mí colocándolo en mi archivo 'test_helper.rb'. Me encontré con esto mientras usa factory_girl 1.3.3, rieles 2.3.11, ruby ​​1.8.7 y bundler 1.0.10 – Sukima

+0

Esto funciona incluso para Rails 3.0.5 y Ruby 1.9.2p180 – Nikhil

+0

Worked me rails 3.0.9 while doing railstutorial. Colocado en mi archivo user_helper. – LondonGuy

0

Ha intentado mover el

require 'factory_girl' 

a su prueba/test_helper.rb?

El mecanismo de carga automática de fábrica puede depender de dónde se llame al require. Podría estar tratando de encontrar fábricas de prueba */modelos/fábricas/** * en lugar de prueba/fábricas/**

0

lugar de nombrar el archivo de test_factory.rb fábrica, tratan nombrarlo factory.rb

+0

los documentos dicen que cualquier archivo .rb en el directorio de prueba/fábricas debería cargarse – brad

2

Tuve el mismo problema. Con el tiempo me hizo hacer poniendo todos mis fábricas en "/test/factories.rb" y escribir las siguientes líneas en mi archivo "/test/test_helper.rb":

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

que podría hacer lo mismo para múltiples archivos al requerirlos en test_helper. Todavía no entiendo por qué la inclusión automática que se menciona en el archivo Léame de "factory_girl" no ocurre.

1

Si solo requiriera 'factory_girl' en test_helper.rb, obtendría el mismo comportamiento que usted mencionó, pero si lo requería en mi config/test/environment.rb (nota que uso environmentalist) encontraría correctamente el Definición de fábrica sin ningún problema.

Intenté esto después de leer el rdoc de factory girl donde dice poner config.gem en su entorno.

3

Trate de poner esto en test_helper.rb:

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

También me las arreglé para deshacerse de este problema al poner esta línea en mi environment.rb:

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

Asegúrese también usted tiene la última joya:

El nombre cambió de "thoughtbot-factory_girl" a "factory_girl", fuente modificada de "http://gems.github.com" a "http://gemcutter.org".

0

Interesante.Tuve un problema similar al tratar de hacer que pepino funcione con factory_girl. Originalmente había configurado factory_girl para ser buscado ('config.gem') pero no cargado en el entorno de pepino y completamente requerido en 'features/support/env.rb', lo mismo que pepino hace para webrat, etc. Eso solo comenzó a trabajo cuando explícitamente le dije a factory_girl que encuentre sus definiciones como sugirió Kenny arriba.

Cuando quité la requieren comunicado de env.rb y factory_girl totalmente necesaria en el entorno de pepino, el efecto fue y factory_girl trabajaban fuera de la caja.

Por lo que realmente parece ser una cuestión de cuándo (o en qué contexto) factory_girl se carga.

2

En caso de que haya tenido este problema con ruby ​​1.9.2, requiera espera la ruta expandida.

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

Este patch resolvió mi problema. Acabo de enviar una solicitud de extracción. Después de que se puede añadir a su test_helper.rb:

require 'factory_girl' 
FactoryGirl.find_definitions 
1

también me encontré con el problema - después de actualizar a 1.3.2 factorygirl - que las fábricas de prueba/fábricas no se cargan automáticamente más.

pudiera deshacerme del problema añadiendo el código de la DG en test_helper.rb:

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

Al ejecutar pruebas individuales en Textmate, todo funcionaba bien, pero el funcionamiento, por ejemplo, todas las pruebas unitarias desde la línea de comando usando la prueba de rake: las unidades fallaron con un DuplicateDefinitionError (he leído que probablemente tiene algo que ver con ruby ​​1.8.x). Así que poco cambiado el código:

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

Tuve exactamente el mismo problema. ¡Gracias! – deb

0

Debido a que diferentes personas utilizan diferentes versiones de carriles (3 y 2.x .x es el más común ahora), es importante incluir las otras piezas pertinentes de su entorno (siendo la versión más importante de Rails en la que se encuentra). Desde la página web factory_girl, versión 1.3.0 documentación (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.

Si tienes problemas con la carga, Te sugiero que te asegures de estar usando la versión correcta. Las versiones de factory_girl mayor que 1.2.4, supongo, se incluyen como dependencias de la gema 'factory_girl_rails' (Rails 3.0+).

0

que añade require 'factory_girl' require File.dirname(FILE) + "/factories" a spec_helper.rb whiche ayudó, pero luego me Rememberd Spork veces puede ba un poco de un problema, así que reiniciado Spork sin la require y luego trabajó muy bien.