単体テストのリクエストパラメータを偽造したいと思います。 Flaskでこれを達成するにはどうすればよいですか?
テストに関するFlaskドキュメント を読みましたか?
以下を使用できます。
self.app.post('/path-to-request', data=dict(var1='data1', var2='data2', ...))
self.app.get('/path-to-request', query_string=dict(arg1='data1', arg2='data2', ...))
Flaskの現在の開発バージョンには、 JSON APIのテスト :のサポートも含まれています。
from flask import request, jsonify
@app.route('/jsonapi')
def auth():
json_data = request.get_json()
attribute = json_data['attr']
return jsonify(resp=generate_response(attribute))
with app.test_client() as c:
rv = c.post('/jsonapi', json={
'attr': 'value', 'other': 'data'
})
json_data = rv.get_json()
assert generate_response(email, json_data['resp'])
役職:
self.app.post('/endpoint', data=params)
取得する:
self.app.get('/endpoint', query_string=params)
test_request_context
を使用する場合:
import unittest from myapp import extract_query_params testapp = flask.Flask(__ name __) class TestFoo(unittest.TestCase ): def test_happy(self): with testapp.test_request_context( '?limit = 1&offset = 2'): limit、offset = extract_query_params(['limit'、 ' offset ']) self.assertEquals(limit、1) self.assertEquals(offset、2)
単体テストの完全なコード例はこちら
testapp = app.test_client()
class Test_test(unittest.TestCase):
def test_user_registration_bad_password_short(self):
response = self.register(name='pat',
email='[email protected]',
password='Flask',
password2='Flask')
self.assertEqual(response.status_code, 200)
self.assertIn(b'password should be 8 or more characters long',
response.data)
def register(self, name, email, password, password2):
return testapp.post(
'/register',
data=dict(username=name,
email=email,
password=password,
password2=password2),
follow_redirects=True
)
これでログインするためのポストフォームデータをテストするとき、私はまだこれで問題がありました。
def login(self, username, password):
return self.app.post('/', data='Client_id=' + username +'&Password=' + password,
follow_redirects=True,content_type='application/x-www-form-urlencoded')
私はこれがこのように出ていることを発見しました。
Chrome:開発者モード->ドキュメント->要求されたHTMLドキュメント->ヘッダータブ->フォームデータ->ソースの表示