with tag rails link_to content_tag based ruby-on-rails testing rspec2

ruby on rails - tag - RoR: probar una acción que utiliza autenticación de token http



token authentication ruby on rails (1)

Supongo que ApiKey es un modelo ActiveRecord, ¿correcto? El comando curl se ejecuta en la base de datos de desarrollo y las pruebas van en contra de la base de datos de prueba. No puedo ver nada de lo que configura ApiKey en tus fragmentos. A menos que lo tenga en otro lugar, intente agregar algo en este sentido:

it "passes the token" do # use factory or just create record with AR: ApiKey.create!(:access_token => ''test_access1'', ... rest of required attributes ...) # this part remains unchanged get :new, nil, :authorization => ActionController::HttpAuthentication::Token.encode_credentials("test_access1") assigns(:token).should be "test_access1" end

Más tarde puede moverlo a before :each bloque o módulo de soporte.

ACTUALIZAR:

Después de ver tu comentario tuve que mirar más profundo. Aquí hay otra conjetura. Esta forma de get

get ''/path'', nil, :authorization => ''string''

Debería funcionar solo en pruebas de integración. Y para las pruebas de control, la preparación de autenticación debería verse así:

it "passes the token" do request.env[''HTTP_AUTHORIZATION''] = ActionController::HttpAuthentication::Token.encode_credentials("test_access1") get :new assigns(:token).should be "test_access1" end

Las razones detrás de esto provienen de las firmas de métodos para los respectivos módulos de prueba:

# for action_controller/test_case.rb def get(action, parameters = nil, session = nil, flash = nil) # for action_dispatch/testing/integration.rb def get(path, parameters = nil, headers = nil)

Estoy intentando probar un controlador que usa una autenticación de token http en el filtro anterior. Mi problema es que funciona bien, aunque uso curl para pasar el token, pero en mis pruebas siempre falla (uso rspec por cierto). Intenté una prueba simple para ver si el token se estaba pasando, pero parece que no lo está haciendo. ¿Me falta algo para que la prueba pase el token al controlador?

Aquí está mi filtro anterior:

def restrict_access authenticate_or_request_with_http_token do |token, options| api_key = ApiKey.find_by_access_token(token) @user = api_key.user unless api_key.nil? @token = token #set just for the sake of testing !api_key.nil? end end

Y aquí está mi prueba:

it "passes the token" do get :new, nil, :authorization => ActionController::HttpAuthentication::Token.encode_credentials("test_access1") assigns(:token).should be "test_access1" end