RSPEC no cargando rutas cuando los directorios de compra de nombres
-
28-10-2019 - |
Pregunta
Para una organización más fácil, me gustaría el espacio de nombres un par de carpetas en mi directorio /especificaciones. Entonces, en lugar de /especificaciones /solicitudes, me gustaría usar /especificar /otro_directory/peticiones.
Sin embargo, cuando ejecuto mis especificaciones en estos nuevos directorios con un conjunto de nombres, obtengo
NoMethodError:
undefined method `whatever_path'
Por lo tanto, se ve como aquellas mis rutas ya no se están cargando correctamente. Si muevo el archivo de nuevo a Spec/Solicitudes (sin el espacio de nombres), todo está bien y la prueba es verde.
No estoy realmente seguro de cuál es el problema. Requeriré 'spec_helper' en mis archivos. También he visto:
require File.dirname(__FILE__) + '/../../spec_helper'
Y sus variaciones, pero no estoy realmente seguro de cómo eso ayuda porque parece cargar el spec_helper, pero no las rutas. Y para hacer que las cosas sean más divertidas, estoy recargando las rutas antes de cada carrera en el bloque Spork.Pre_Fork
Spork.each_run do
load "#{Rails.root}/config/routes.rb"
end
Pero todavía recibo el error si Spork está funcionando o no.
¿Qué estoy haciendo mal?
(Rspec-Rails 2.8.1)
Solución
Creo que esto se debe Ejemplo de solicitud antes del gancho no se dispara. Si miras más lejos, puede entender cómo los rspec-rails deciden qué ejemplo se ejecuta.
Te sugiero que uses spec/requests/another_directory
esquema o puede intentar reconfigurar rspec de algo así:
RSpec::configure do |config|
config.include RSpec::Rails::RequestExampleGroup, :type => :request,
:example_group => {:file_path => 'path/to/your/requests')}
end
Otros consejos
Terminé haciendo:
config.include RSpec::Rails::RequestExampleGroup, :type => :request,
:example_group => {
:file_path => config.escaped_path(%w[spec (my|folder|names) requests])}
Pero, entonces no está obteniendo los métodos de Capybara, por lo que incluyo nuevamente después del bloque de configuración anterior
config.include Capybara::DSL, :type => :request
config.include Capybara::RSpecMatchers, :type => :request
Quería hacer que el camino sea más elástico para no tener que incluir cada carpeta 'padre'. Intenté usar ** en lugar de tener que incluir (cada una carpeta), pero no se cargó. Luego intenté configurar la ruta directamente usando:
:file_path => "spec/../requests"
Pero luego pierdo la capacidad de ejecutar un solo archivo.
De cualquier manera, el código anterior funciona, solo tiene que abordar cada uno de los nombres de su carpeta.