2011-11-07 16 views
9

Estoy probando mis controladores con Rspec y parece que no puedo establecer la variable de sesión del controlador actual bajo prueba antes de realizar la solicitud a la ruta. Por ejemplo, esto funciona:sesión del controlador de acceso Rspec 2.7 en la especificación antes de realizar la solicitud

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     get controller_path 

     request.session[:state] = "12334" 
    end 
    end 

esto no funciona (me sale un error diciendo que la sesión no es un método de clase cero):

 describe "GET /controller/path" do 
     it "if not matching CRSF should display message" do 
      request.session[:state] = "12334" 
      get controller_path 
     end 
     end 

¿Alguna idea?

Respuesta

6

Prueba esto:

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     session[:state] = "12334" 
     get controller_path 
    end 
    end 
9

Con la nueva versión de RSpec esto se hace bastante agradable, mira:

describe SessionController do 
    # routes are mapped as: 
    # match 'login' => 'session#create' 
    # get 'logout' => 'session#destroy' 

    describe "#create" do 
    context "with valid credentials" do 
     let :credentials do 
     { :email => '[email protected]', :password => 'secret' } 
     end 

     let :user do 
     FactoryGirl.create(:user, credentials) 
     end 

     before :each do 
     post '/login', credentials 
     end 

     it "creates a user session" do 
     session[:user_id].should == user.id 
     end 
    end 

    # ... 
    end 

    describe "#destroy" do 
    context "when user logged in" do 
     before :each do 
     get "/logout", {}, { :user_id => 123 } # the first hash is params, second is session 
     end 

     it "destroys user session" do 
     session[:user_id].should be_nil 
     end 

     # ... 
    end 
    end 
end 

También puede utilizar simplemente request.session[:user_id] = 123 dentro before(:each) bloque, pero por encima se ve muy bonito.

+1

debe funcionar en 2016) tener un error en esta comprobación que 'debe autenticar usuario qué esperan (sesión? [: User_id].) A la ecuación (user.id) final –

Cuestiones relacionadas