2016-08-03 15 views
3

Ich muss eine bestimmte Ansicht testen, die bestimmte Informationen von request.args bekommt.Wie legen Sie Anfrageargumente mit Flask test_client fest?

Ich kann das nicht verspotten, da viele Dinge in der Ansicht das Anfrageobjekt verwenden. Die einzige Alternative, die ich mir vorstellen kann, ist das manuelle Setzen von request.args.

Das kann ich mit ihm test_request_context(), z:

with self.app.test_request_context() as req: 
    req.request.args = {'code': 'mocked access token'} 
    MyView() 

Nun ist die Anfrage innerhalb dieser Ansicht, die Argumente haben, die ich festgelegt haben. Allerdings muss ich meine Ansicht nennen, nicht nur es initialisieren, so dass ich dies:

with self.app.test_client() as c: 
    resp = c.get('/myview') 

Aber ich weiß nicht, wie die Anforderungs Argumente auf diese Weise zu manipulieren.

Ich habe dies versucht:

with self.app.test_client() as c: 
    with self.app.test_request_context() as req: 
     req.request.args = {'code': 'mocked access token'} 
     resp = c.get('/myview') 

aber request.args nicht gesetzt.

+0

Beachten Sie, dass das Setzen von 'request.args' auf ein' dict' nicht korrekt ist, sondern ein 'MultiDict'. – davidism

+0

Ja, aber meine einzige Interaktion mit 'request.args' ist meiner Ansicht nach über 'request.args.get (' foobar '). Mit anderen Worten, die Funktionalität eines ImmutableMultiDict ist hier völlig irrelevant. Und selbst wenn es das Problem ist, weiß ich nicht, wie ich es einstellen soll. –

Antwort

6

Pass das query_string Argument c.get, der entweder ein dict, ein MultiDict, oder eine bereits codierte Zeichenfolge sein kann.

with app.test_client() as c: 
    r = c.get('/', query_string={'name': 'davidism'}) 

Die test client request methods geben ihre Argumente Werkzeug des EnvironBuilder, das ist, wo dies dokumentiert ist.