2012-04-30 8 views
7

Hi Avevo un servizio di autenticazione che funziona su Richiesta (alcuni dati di intestazione e cookie), Risposta (per impostare o eliminare un cookie) e sessione (Memorizza userId e ricorda le mie informazioni).Come manipolare Session, Request e Response per test in play2.0

Nel gioco 1.x era facile falsificare Richiesta, Risposta, Cookie e Sessione. Potrebbe essere facilmente impostato con Session.current().set(new Session()). Nel gioco 2.0 questo non funziona più.

Come posso aggiungere un cookie a una richiesta? Come posso manipolare la sessione? Ho visto che esiste FakeApplication e FakeRequest ma non l'ho capito, come lavorare con loro.

Qualsiasi suggerimento è apprezzato.

risposta

4

E 'possibile farlo simile a play1.x. Il punto centrale è Context. Inoltre è necessario creare un DummyRequest che implementa i metodi necessari. Poi è possibile creare la seguente

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

nel tuo test è possibile ottenere Context.current().session(), Context.current().response() o Context.current().request().

Potete vedere qui un test-example.

+0

Invece di implementare un'intera richiesta fittizia, sarebbe probabilmente più semplice usare una libreria fittizia . +1 comunque per il 'Context.curr ent.set() 'risposta. –

+0

Sì, una libreria fittizia sarebbe l'approccio più pulito. Ho avuto qualche problema l'ultima volta con le dipendenze, quindi ho scelto nell'intero test di scrivere manualmente i miei mock. – niels

12

non fosse pronto per giocare 2.0, ma in Play 2.1 (e in master attuale) sarete in grado di scrivere:

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

Se lo chiamo, lo otterrò con 'Context.current(). Request()'? Dev'esserci un percorso per l'URL? Voglio dire che FakeRequest è inutile solo perché non è un'istanza di richiesta :-( – niels

+0

Sì, ogni URL deve avere una rotta. All'interno di un'azione è possibile recuperare la sessione corrente usando [session()] (http: // www .playframework.org/documentation/api/2.0/java/index.html) metodo del controller –

+0

Scusa ma provo a testare un modulo, quindi non ho un percorso, per il test questo non è necessario. apprezzerei se non fosse necessario creare un controller solo per il test.Ho provato FakeRequest e poi Context.current(). request(), ma ho ottenuto un RuntimeException. Quindi non capisco ancora cosa fa FakeRequest. – niels

Problemi correlati