我试图正确地对我的Flask 1.1.2
路由进行单元测试,但并不真正理解有关模拟应用程序上下文的文档
这是我的班级Launch.py
:
from flask import Flask, request
from LaunchHelper import runController
#Create app
app = Flask(__name__)
@app.route('/write-database',methods=['POST'])
def writeDatabase():
return runController(request)
以下是我在@Felipe Emirem评论之后的新TestLaunch.py
:
import unittest
from mock import patch, MagicMock
from flask import request #added
from Launch import app #added
class TestLaunch(unittest.TestCase):
@patch('Launch.runController')
def test_writeDatabase(self,runController):
resp = MagicMock()
runController.return_value = resp
with app.test_client() as c:
ret = c.post('/write-database')
#assert ret == resp
runController.assert_called_with(request)
if __name__ == '__main__':
unittest.main()
我现在可以断言runController
是通过直接从Launch.py
导入app
用flask.request
调用的,这是有道理的。但我不确定如何确认回复是否正确
此外,我现在得到以下错误:
ERROR in app: Exception on /write-database [POST]
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1953, in full_dispatch_request
return self.finalize_request(rv)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1968, in finalize_request
response = self.make_response(rv)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 2117, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "C:\ProgramData\Anaconda3\lib\site-packages\werkzeug\wrappers\base_response.py", line 269, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "C:\ProgramData\Anaconda3\lib\site-packages\werkzeug\wrappers\base_response.py", line 26, in _run_wsgi_app
return app_iter, response[0], Headers(response[1])
IndexError: list index out of range
即使考试通过了
*编辑:这是我更改为使用app.test_context()
之前的旧测试类TestLaunch.py
:
import unittest
from mock import patch, MagicMock
from Launch import writeDatabase
class TestLaunch(unittest.TestCase):
@patch('Launch.runController')
@patch('Launch.request')
def test_writeDatabase(self,request,runController):
resp = MagicMock()
runController.return_value = resp
ret = writeDatabase()
assert ret == resp
runController.assert_called_with(request)
if __name__ == '__main__':
unittest.main()
我在旧版本的flask上运行了这个,它运行得很好,但是现在由于@patch('Launch.request')
行,我得到了Working out of request context
错误。我试着阅读其他stackoverflow文章和flask文档,但我找不到任何适用于我当前用例的东西
好的,我知道了。只需要使用我在这里读到的
test_request_context
:link这是我的新
TestLaunch.py
:我不是在测试URL(我本来也不是这样),但是我能够测试
flask request
对象是否被正确处理相关问题 更多 >
编程相关推荐