Su código se parece mucho a la mía - yo estaba tratando de utilizar las funciones Diseñar TestHelper capibara y, y resulta que no se puede, por https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara. La forma recomendada de hacerlo se explica en esa página, y funcionó para mí.
Para ser claros, esto es lo que hice - en spec_helper.rb
:
RSpec.configure do |config|
config.include Warden::Test::Helpers
end
Warden.test_mode!
Y en mi código, simplemente - logout :user
.
He aquí por qué, según la wiki Diseñar, no se puede utilizar sign_out
:
Si usted se pregunta por qué no podemos simplemente usar construida en métodos sign_in y sign_out, es porque estos requieren acceso directo del Legado al objeto de solicitud que no está disponible durante el uso de Capybara. Para agrupar la funcionalidad de ambos métodos, puede crear un método de ayuda.
Lo cual, más o menos, significa que mientras que con, digamos, MiniTest
, se añade un objeto que representa la solicitud (@request
) como una variable de instancia a la clase de caso de prueba, que no sucede con Carpincho. No he examinado el código para conocer los detalles más exactamente, pero básicamente, Warden espera encontrar este objeto para acceder al almacén de cookies donde se encuentran las credenciales de inicio de sesión. Con Capybara/RSpec, espero que esto no esté sucediendo.
Aquí hay una solución de idear github wiki que funciona en la prueba de controlador para mí [https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4 - (y-RSpec)] (https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4- (and-RSpec)) –