2011-10-15 10 views
9

Estoy usando el dispositivo configurado para usar la integración de inicio de sesión de omniauth facebook. Al llamar al método sign_in de mis spec/request pruebas me sale:Prueba de integración con rspec y diseño de sign_in env

undefined method `env' for nil:NilClass 

especificaciones:

describe FacebookController do 
    include Devise::TestHelpers 

    it "should display facebook logged in status" do 
    @user = User.create(:id => "123", :token => "token") 
    sign_in @user 
    visit facebook_path 
    end 
end 
+0

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)) –

Respuesta

7

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.

Cuestiones relacionadas