Al ejecutar mis pruebas me sale este error:¿Cómo resolver FixtureClassNotFound: No Clase unido a encontrar
FixtureClassNotFound: No class attached to find
¿Qué causa este error y cómo solucionarlo?
Al ejecutar mis pruebas me sale este error:¿Cómo resolver FixtureClassNotFound: No Clase unido a encontrar
FixtureClassNotFound: No class attached to find
¿Qué causa este error y cómo solucionarlo?
más probable es que esto sucede porque un nombre de tabla personalizada se utiliza para un modelo (utilizando el set_table_name) o el modelo está en un módulo.
de resolver, es necesario agregar una línea set_fixture_class en el test_helper.rb antes de que los accesorios ': todo' línea:
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
.
.
.
set_fixture_class :my_table_name => "MyModule::MyClass"
fixtures :all
end
En este caso, el archivo de los accesorios debe ser llamado my_table_name.yml
NOTA: Sería útil si incluyó el seguimiento de la pila y el mensaje de error completo.
En su clase de prueba/test_helper.rb, hay una línea como
fixtures :all
Esto le dice al marco para mirar en la prueba de directorio/accesorios y tratar de cargar cada uno de los archivos YAML que ve allí y luego guardarlos en la base de datos. Así que mi corazonada es que tienes un archivo allí que no tiene clase en la aplicación/modelos con el nombre singularizado. En otras palabras, si hay un archivo test/fixtures/posts.yml, entonces cuando ejecute sus pruebas, el framework buscará una clase llamada Post para cargar sus datos.
Así que lo primero que haría es comprobar para ver si tiene un archivo de dispositivo que no está asociado con una de sus clases de modelo (tal vez borró un modelo pero se olvidó de eliminar el dispositivo?)
Si eso no funciona, intente cambiar la línea en su ayudante de prueba para cargar explícitamente los accesorios que necesita. Así que si sólo desea cargar los accesorios para un objeto denominado Post y un objeto denominado usuario, que va a cambiar:
fixtures :all
a
fixtures :posts, :users
en test_helper.rb y debería ver el error desaparezca (aunque otros errores que ahora pueden aparecer debido a sus accesorios no están loaded.0
Gracias por la respuesta Rob. De hecho, encontré la solución y la agregué como respuesta aquí. –
Tenga en cuenta que si tiene "fixtures: all" en muchos archivos de prueba unitarios, también debe colocar set_fixture_class en cada archivo, no solo en los lugares donde va a utilizar los accesorios de ese modelo. Esto realmente me confundió, pero tiene sentido después del café. Preferiría que de alguna manera esta información estuviera SECA en el modelo en sí. – mcr
I Obtuve este error cuando cometí un error al generar un código de andamio. Utilicé un nombre de modelo plural, y eso confundió la carga del dispositivo, supongo. La regeneración del andamio con un nombre de modelo único solucionó el problema.
En el supuesto de que la clase es una clase irregulares en cuanto a nombrar como fish
, sms
que pudo haber sido creado por el uso de la bandera i --force-plural
.e rails g model sms --force-plural
en ese caso se establecería una inflexión que se creó en virtud del config/initializers/inflections.rb
un ejemplo de este tipo es este
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.plural /^(ox)$/i, '\1en'
inflect.singular /^(ox)en/i, '\1'
inflect.irregular 'person', 'people'
inflect.uncountable %w(fish sheep)
end
De esta manera, la clase puede ser reconocida como usted lo declaró
Si su clase no está en un módulo (su respuesta no es 100% clara al respecto) podría deberse a un nombre de modelo extraño que el inflector de Rails no sabe cómo singularizar correctamente. En ese caso, será mejor que agregue una inflexión personalizada en config/initializers/inflections.rb, ya que es probable que también cause problemas en otras áreas. – hermannloose
estaba enfrentando el mismo error después de agregar esta línea mi error se cambia a ArgumentError: ArgumentError: comparación de String with Class falló – wasipeer
@wasipeer: intente 'set_fixture_class my_table_name: MyModule :: MyClass' –