Я определил следующее в ApplicationController.py
, который является маршрутом для многопоточного приложения Flask:
@app.route('/enqueued/')
def enqueuedRoute():
#Put Url In Queue then Await to Execute Next Job
putUrlInQueue(request)
resp = awaitAndExecuteJob()
return resp.raw.read()
Затем я попытался создать следующий TestApplicationController.py
файл:
import unittest
from unittest.mock import MagicMock
from mock import patch
from controller.ApplicationController import app
class TestApplicationController(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['DEBUG'] = False
self.app = app.test_client()
@patch('controller.ApplicationController.request')
@patch('controller.ApplicationController.awaitAndExecuteJob')
@patch('controller.ApplicationController.putUrlInQueue')
def test_enqueuedRoute(self, putUrlInQueue, awaitAndEx, request):
resp = MagicMock()
respRaw = MagicMock()
resp.raw.read.return_value = respRaw
awaitAndEx.return_value = resp
ret = self.app.get('/enqueued/')
assert ret == respRaw
Когда я делаю это, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\mock\mock.py", line 1305, in patched
return func(*args, **keywargs)
File "C:\apps\GBI-ApplicationRequestHandler\test\unit\controller\TestApplicationController.py", line 89, in test_enqueuedRoute
ret = self.app.get('/enqueued/')
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\test.py", line 778, in get
return self.open(*args, **kw)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\testing.py", line 113, in open
follow_redirects=follow_redirects)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\test.py", line 751, in open
response = self.run_wsgi_app(environ, buffered=buffered)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\test.py", line 668, in run_wsgi_app
rv = run_wsgi_app(self.application, environ, buffered=buffered)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\test.py", line 871, in run_wsgi_app
app_rv = app(environ, start_response)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 2000, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1991, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1567, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1988, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1642, in full_dispatch_request
response = self.make_response(rv)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1746, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\wrappers.py", line 847, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\wrappers.py", line 57, in _run_wsgi_app
return _run_wsgi_app(*args)
File "C:\Users\developer\AppData\Local\Continuum\Anaconda3\lib\site-packages\werkzeug\test.py", line 890, in run_wsgi_app
buffer.append(next(app_iter))
StopIteration
Я знаю, что проблема связана со строкой return resp.raw.read()
, потому что, если я изменю ее на return jsonify(success=True)
, тест будет работать нормально.
Что мне нужно сделать, чтобы правильно высмеивать ответ?
Я полагаю, что проблема связана с этим обсуждением на GitHub: Ссылка .