2009-06-12 15 views
8

Estoy desarrollando una aplicación que utiliza Twitter oauth y se encontró con una pared de ladrillo tratando de averiguar cómo probar Twitter oauth. Especialmente tratando de usar Cucumber y Webrat/Selenium para probar la funcionalidad: ciertos pasos en el proceso de registro/inicio de sesión se comportan de manera diferente si el usuario ha otorgado o no acceso a la aplicación, entre otras cosas.Estrategias de prueba para Ruby on Rails y Twitter OAuth

¿Alguien por ahí ha tenido éxito al burlar o pegar partes o todo el sistema Twitter OAuth en sus características de Ruby on Rails Cucumber (o cualquier otro marco de prueba para el caso)? Cualquier ayuda sería apreciada.

Respuesta

3

No tengo una receta precisa para twitter (no he hecho exactamente eso hasta ahora), pero dado que OAuth tiene una especificación que describe los diferentes flujos posibles, trataría de enumerar cada uno de ellos para el caso en cuestión, y Intenta automatizar la interacción.

para guiarlo, aquí hay algunos punteros a la información relevante:

Por lo general, el flujo de web basado es diferente (como has visto) si los Estados Unidos er no ha dado autorización para la aplicación cliente:

  • si el usuario aún no ha dado autorización para la aplicación cliente, entonces se redirige al sitio de proveedor de servicios
    • en el proveedor de servicios es que el usuario se no ha iniciado sesión en que se requiere para autenticar con sus credenciales
    • vez autenticado en el proveedor de servicios se requiere para autorizar o denegar la autorización a la aplicación cliente/servicio
    • una vez que se ha dado la respuesta autorizarlo es enviado de vuelta a el cliente sitio que puede tener una token de acceso
  • si el usuario ya había autorizado la aplicación cliente/servicio, entonces puede utilizar el token de acceso para eludir esas medidas y de los usuarios de acceso a datos/API en el proveedor de servicios
3

que utilizan burlarse de mis casos de prueba. Probé de forma manual, descubrí cuáles deberían ser las respuestas y anulé la gema de ruby ​​oAuth. Aquí es un caso de prueba (utilizando Shoulda) para un tweet éxito:

context 'cork/tweet' do 
    setup do 
     response = Net::HTTPResponse.new("1.1", 200, "") 
     Net::HTTPResponse.any_instance.stubs(:body).returns JSON_RESPONSE 
     OAuth::AccessToken.any_instance.stubs(:post).returns(response) 
     post :create, :cork_id => @cork.id, :message=>MESSAGE  
    end 
    should_respond_with :redirect 
    should_change('Tweet.count' , :by => 1) {Tweet.count} 
    .. and so on 

JSON_RESPONSE es la respuesta he recogido de mis pruebas manuales - pongo un printf en lib/oauth/fichas/access_token.rb: 44: en `post 'para capturar la respuesta.

De lo contrario, es casi imposible de probar, como usted señala, Twitter no tiene manera de desautorizar su aplicación de la API, y actúa de manera diferente si ya ha autorizado la aplicación.