Ошибка остановки WSGI в модульном тесте приложения Flask - PullRequest
0 голосов
/ 09 июля 2019

Я определил следующее в 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: Ссылка .

...