2016-04-06 17 views
0

私は次のコードを持っています。これはPOST要求を受け入れて処理します。フラスコのPOSTユニットテストを処理する最良の方法

index.py

@app.route('/route', methods=['POST']) 
def route_post(): 
    try: 
     data = request.get_data() 
     j = json.loads(data) 
    except Exception as e: 
    ... 

は基本的に、私は()ので、私は値を変更することができrequest.get_dataにアクセスしたいです。私は次のようにテストを呼び出しています。これは簡単ではありません。

route_test.py:

def test_route(): 
    assert(("Bad Request\r\n", 400) == route_post()) 

しかし、私はrequest.get_dataの値を設定することはできません()。これどうやってするの?

+0

ユニットテストでrequest.get_data()にアクセスしますか? – reptilicus

+2

テストクライアントで必要なデータを投稿しますか?あなたはどんな問題を抱えていますか? – davidism

+0

POSTデータ(本体)を設定する簡単な方法はありません。これはrequest.get_data()によって取得されます。これは、mocks/patchを使用してそのメソッドにパッチを当てて値を設定することを示唆しています。 –

答えて

0

要求オブジェクトのget_dataメソッドには、返される内容を返すmockオブジェクトを追加できます。

2

ルートに必要なデータを投稿するには、テストクライアントを使用します。 dataが文字列またはバイトの場合、Werkzeugはデータを直接バイトとして送信します。

from flask import Flask, request 

app = Flask(__name__, static_folder=None) 

@app.route('/', methods=['POST']) 
def index(): 
    return request.get_data() 

c = app.test_client() 
r = c.post('/', data='Hello, World!') 
print(r.data) # b'Hello, World!' 
+0

これはうまくいきません。次の例外があります:RuntimeError( '要求コンテキスト外での作業')。これは 'data = request.get_data()'によって引き起こされます。 –

+0

この例は私のためにも実行されますが、私のコードで同じアプローチを試みると失敗します。私はGoogleと同じエラーの多くを見る。 –

+0

@ mr-skは、mcveで新しい質問が必要な別のエラーのように聞こえます。私は "テストにデータを投稿するにはどうすればいいですか"と答えました。 – davidism

関連する問題