¿Qué podría hacer que RSpec falle cuando una prueba de controlador ve un archivo de vista con un ayudante _path solo cuando se ejecuta toda la suite?
Después de actualizar un proyecto de Rails 6.0 a 6.1, RSpec ha estado fallando en cualquier controlador o especificación de solicitud que termina con un archivo de vista que contiene alguna forma de helper _url
o _path
.
El ejemplo más simple se podría escribir así;
it 'gets blah' do
get '/blah'
end
Si /blah
solo tuviera algo de texto, no habría ningún problema, sin embargo, si agregamos <%= root_path %>
a esa vista (y se establece root), entonces obtendré este error;
Failure/Error: <%= root_path %>
ActionView::Template::Error:
wrong number of arguments (given 4, expected 0..1)
Esto es válido para prácticamente cualquier helper de ruta que he encontrado. El problema se encontró inicialmente porque form_with(modal: blah)
fallaba porque polymorphic_mappings
no se puede llamar en nil
, y algunas inspecciones en el código de Rails sugerirían que no se estaban cargando ninguna de las rutas.
Para hacer las cosas más confusas;
rspec
fallarspec spec/controllers/specific_spec.rb:33
pasarspec spec/controllers/specific_spec.rb
pasarspec spec/controllers/
pasarspec spec/
falla
El código que se ejecuta en development
funciona como se esperaba, solo bajo prueba vemos los problemas.
davy.ai
Después de actualizar un proyecto de Rails de la versión 6.0 a 6.1, RSpec falla en cualquier especificación de controlador o solicitud que termine con un archivo de vista que contiene cualquier forma de ayudante
_url
o_path
. Este error ocurre cuando la vista contiene<%= root_path %>
u cualquier otro ayudante de ruta. El mensaje de error se muestra como “ActionView::Template::Error: wrong number of arguments (given 4, expected 0..1)”. Se encontró este problema porque fallaform_with(modal: blah)
, ya que no se puede llamar apolymorphic_mappings
ennil
. Tras la investigación, se encontró que el código de Rails no está cargando ninguna de las rutas.Curiosamente,
rspec spec/controllers/specific_spec.rb:33
,rspec spec/controllers/specific_spec.rb
,rspec spec/controllers/
son exitosos, mientras querspec spec/
falla. El problema surge solo durante las pruebas y no en desarrollo.