La mayoría de mis pruebas están planteando lo siguiente y no entiendo por qué. Todos los métodos de llamada generan el error 'autenticar'. Verifiqué el código si había un método llamado "autenticar" pero no existe tal método.
1) Admin::CommentsController handling GET to index is successful
Failure/Error: get :index
undefined method `authenticate!' for nil:NilClass
# ./spec/controllers/admin/comments_controller_spec.rb:9:in `block (3 levels) in <top (required)>'
124) PostsController handling GET for a single post should render show template
Failure/Error: get :show, :year => '2008', :month => '01', :day => '01', :slug => 'a-post'
undefined method `authenticate' for nil:NilClass
# ./app/controllers/application_controller.rb:18:in `set_current_user_for_model'
# ./spec/controllers/posts_controller_spec.rb:131:in `do_get'
# ./spec/controllers/posts_controller_spec.rb:140:in `block (3 levels) in <top (required)>'
El proyecto se puede encontrar allí => https://github.com/agilepandas/enki en caso de que desee ejecutar las pruebas usted mismo.
Soy consciente de que está utilizando Rspec pero con este mismo problema puede encontrarse
Test::Unit
. Solo necesita agregar los ayudantes de prueba de diseño atest/test_helper.rb
fuente
La respuesta anterior no me funcionó (RSpec 3.1)
Consulte https://stackoverflow.com/a/21166482/1161743 para obtener una solución que funcionó para mí.
Deberá cerrar sesión en un usuario anónimo antes de configurar variables:
fuente
en RSpec
como Jeffrey W. mencionó, en su respuesta anterior -> para configurar esto a todos los controladores:
sin embargo, si esto es relevante para una sola especificación, no necesariamente necesita incluir ayudantes de diseño en todas las especificaciones de sus controladores, solo puede incluir explícitamente esos ayudantes en ese bloque de descripción de controlador:
fuente
Estaba experimentando los mismos fracasos en uno de mis proyectos. Está utilizando Ruby 2.0.0-p598, Rails 3.2.21, RSpec 2.99. Cuando ejecuté todas las especificaciones juntas, ocurrió el problema. Cuando ejecuté las especificaciones individualmente, pasaron. Tengo lo siguiente incluido en mi spec / spec_helper.rb:
Agregué lo siguiente a la primera descripción en cada archivo de especificaciones que falla. Esto no resolvió el problema:
Tampoco lo hizo:
Inspirándome en la respuesta a esta pregunta de stackoverflow, ejecuté diferentes combinaciones de directorios rspec juntos para descubrir cuáles podrían estar interfiriendo entre sí. Al final descubrí que estaba llamando:
cuando cambié todas las ocurrencias de esto a:
Todas las especificaciones pasaron sin la falla:
Espero que esto sea de ayuda para otros.
fuente
Si está trabajando con especificaciones de vista, puede tropezar
current_user
. Esto anula efectivamente elcurrent_user
ayudante llamado desde su vista con lo que sea devuelto. Así es como con rspec-3.2.3:fuente
Parece que hay algunas actualizaciones al código fuente. ApplicationController especifica que se debe
authenticate_user!
ejecutar un filtro antes de cualquier solicitud. Este hilo proporciona algunos antecedentes sobre problemas con él:http://groups.google.com/group/plataformatec-devise/browse_thread/thread/f7260ebe2d9f7316?fwc=1
Esencialmente, la
authenticate_user!
función es parte de Rails 3 (usando el nuevodevise
característica, de la que sé poco). Si la aplicación no puede encontrar el modelo de Usuario (ya sea por problemas de espacio de nombres o por cualquier motivo), el método fallará. La aplicación "enki" a la que se vinculó ahora es una aplicación Rails 3. Podría estar experimentando algunos dolores de crecimiento a medida que se convierte.fuente
Ruby te está diciendo que ese método
#authenticate
aún no se ha definidonil
. Puedes hacerlo fácilmente al:Y el error desaparecerá.
fuente