2012-04-30 19 views
7

Hola tuve un servicio de autenticación que funciona en Request (algunos Header-Data y Cookie), Response (para establecer o eliminar una cookie) y session (Store userId y recuerdame-información).Cómo manipular Session, Request y Response para test en play2.0

En juego 1.x fue fácil de falsificar Solicitud, Respuesta, Cookie y Sesión. Se puede configurar fácilmente con Session.current().set(new Session()). En Play 2.0 esto ya no funciona.

¿Cómo puedo agregar una cookie a una solicitud? ¿Cómo podría manipular la sesión? Vi que existe FakeApplication y FakeRequest pero no lo conseguí, cómo trabajar con ellos.

Cualquier sugerencia es apreciada.

Respuesta

4

Es posible hacerlo similar a play1.x. El punto central es Context. Además, debe crear un DummyRequest que implemente los métodos que necesita. Entonces es posible crear la siguiente

final Request request = new DummyRequest(); 
Context.current.set(new Context(request, new HashMap <String, String>(), 
     new HashMap <String, String>())); 

en su prueba se puede obtener Context.current().session(), Context.current().response() o Context.current().request().

Puedes ver aquí un test-example.

+0

En lugar de implementar una solicitud ficticia completa, probablemente sería más fácil usar una biblioteca simulada . +1 de todos modos para 'Context.curr ent.set() 'respuesta. –

+0

Sí, una biblioteca falsa sería el enfoque más limpio. Tuve algunos problemas la última vez con dependencias, por lo que elijo en toda la prueba escribir mis simulacros manualmente. – niels

12

que no estaba listo para el Juego 2.0, pero en Juego 2.1 (y en el maestro actual) usted será capaz de escribir:

fakeRequest(GET, "/foo") 
    .withSession("bar", "baz") 
    .withCookies(cookie("bah", "toto")); 
+0

Si llamo esto, ¿lo obtendré con 'Context.current(). Request()'? ¿Debe haber una ruta para la URL? Quiero decir que un FakeRequest solo es inútil porque no es una instancia de Request :-( – niels

+0

Sí, cada URL debe tener una ruta. Dentro de una acción puede recuperar la sesión actual usando [session()] (http: // www) .playframework.org/documentation/api/2.0/java/index.html) Método del controlador –

+0

Lo siento, pero trato de probar un módulo, así que no tengo una ruta. Para la prueba esto no es necesario. Además, apreciaría si no debe crear un controlador solo para la prueba. Intenté FakeRequest y luego Context.current(). request(), pero obtuve una RuntimeException. Así que todavía no entiendo qué es lo que hace fakeRequest. – niels

Cuestiones relacionadas