2016-08-03 11 views
3

私はrequest.argsから特定の情報を取得する特定のビューをテストする必要があります。Flask test_clientでリクエストargsを設定するには?

ビュー内の多くのものがリクエストオブジェクトを使用しているので、私はこれを嘲笑することはできません。 私が考えることのできる唯一の方法は、request.argsを手動で設定することです。

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

は今、このビュー内の要求は私が設定した引数を持つことになります。私は、彼は)(test_request_contextで、例えばそれを行うことができます

。 私は私の見解を呼び出す必要がありますしかし、それを初期化するので、私はこれを使用しない:

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

しかし、私は、このように、要求の引数を操作する方法がわかりません。

私はこれを試してみました:

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') 

が、これはrequest.argsを設定しません。

+0

'request.args'を' dict'に設定することは正しくないことに注意してください。実際には 'MultiDict'です。 – davidism

+0

はい、私のビューの 'request.args'との私の唯一のやり取りは 'request.args.get(' foobar ')です。言い換えれば、ImmutableMultiDictの機能は完全に無関係です。それが問題であっても、私はそれをどのように設定するのか分かりません。 –

答えて

6

はどちらかdictMultiDict、または既にエンコードされた文字列とすることができる、c.getquery_string引数を渡します。

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

test client request methodsは、これは文書化されているところである、WERKZEUGのEnvironBuilderに引数を渡します。

関連する問題