En un proyecto de Rails, he creado una nueva clase dentro del directorio lib , esta clase tiene un espacio de nombres dentro de un módulo. Al crear un archivo de especificaciones para él, veo NameError: uninitialized constant MyNamespace .
Aquí está mi estructura de carpetas
app/ ... lib my_namespace my_new_class.rb another_namespace another_old_class.rb spec lib my_namespace my_new_class_spec.rb another_namespace another_old_class_spec.rb Aquí el contenido (abreviado) de: lib/my_namespace/my_new_class.rb
module MyNamespace class MyNewClass end end spec/lib/my_namespace/my_new_class_spec.rb
RSpec.describe MyNamespace::MyNewClass do it "is true" expect(true).to eq(true) # irrelevant at this point end end La razón por la que another_old_class_spec.rb es que sus pruebas se ejecutan sin problemas y no puedo encontrar ningún lugar donde esté explícitamente cargado o requerido en la configuración de la prueba (en caso de que pueda ser un problema potencial).
Al ejecutar la prueba con bundle exec rspec spec/lib/my_namespace/my_new_class_spec.rb o incluso bundle exec rspec spec/lib/my_namespace/ obtengo
An error occurred while loading ./spec/lib/my_namespace/my_new_class_spec.rb Failure/Error: RSpec.describe MyNamespace::MyNewClass do NameError: uninitialized constant MyNamespaceComo Georgiy Melnikov dio a entender en su comentario, de forma predeterminada, el directorio /lib no está en las rutas de carga automática, por lo que la constante MyNamespace no se resuelve automáticamente.
Básicamente tienes dos opciones para arreglar esto:
require lib/my_namespace/my_new_class en la parte superior del archivo de especificacioneslib/ a las rutas de carga automática (hoy en día esto no se recomienda)