我正试图为我的flask项目编写单元测试,但没有成功。例如,我在烧瓶上有以下API终点:
@app.route('/1.0/account/login', methods=['POST'])
def login():
return jsonify({'success':0,
'response_detail': "Could not log in",
'method':'login',
'error_code':1,
'error_tag':"invalid_json_request",
'response_message':"Failing test request",
'response_code': 0,
'data': "",
'data_count': 0}), 400
正如您所看到的,它应该总是返回一个带有400响应错误的json对象。
我写了这个测试:
import unittest
from MY_PROJECT import app, db
class BasicTests(unittest.TestCase):
############################
#### setup and teardown ####
############################
# executed prior to each test
def setUp(self):
app.config['TESTING'] = True
#app.config['WTF_CSRF_ENABLED'] = False
app.config['DEBUG'] = False
self.app = app.test_client()
#db.drop_all()
#db.create_all()
# Disable sending emails during unit testing
#mail.init_app(app)
self.assertEqual(app.debug, False)
# executed after each test
def tearDown(self):
pass
###############
#### tests ####
###############
# run with: ENV=test python3 -m unittest fotomarket/tests/test_basic.py
def test_login(self):
r = self.app.post('/1.0/account/login', json={"name":"lala"})
print(r.get_json())
self.assertEqual(r.status_code, 200)
if __name__ == "__main__":
unittest.main()
它运行,但它总是断言响应的状态码是200(尽管它应该是400,但任何地方都没有json数据。我在测试中尝试通过content_type='application/json'
,但没有成功。我做错了什么?
谢谢。
确保您没有使用任何@app.before_request
或@app.after_request
装饰器,因为它们会影响您获得的结果。它们仅用于处理CORS标头。