Первый Flask unittest прошел успешно, все последующие тесты не пройдены. Может быть, устаревший app_context? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь настроить некоторые модульные тесты с помощью модуля Python unittest, но мне не удается пройти более одного теста. Кажется, они запускают их в алфавитном порядке, и только первый успешно завершается. Однако я могу запустить любой тест индивидуально, и он отлично завершится. Я предполагаю, что это как-то связано с отсутствием fre sh app_context каждый раз, но я не могу понять этого.

❯ ./test_api.py
.FF
======================================================================
FAIL: test_get_category_of_questions (__main__.TriviaTestCase)
Test getting a list of trivia questions by category.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./test_api.py", line 73, in test_get_category_of_questions
    self.assertEqual(response.status_code, 200)
AssertionError: 404 != 200

======================================================================
FAIL: test_get_one_question (__main__.TriviaTestCase)
Test getting a specific question.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./test_api.py", line 35, in test_get_one_question
    self.assertEqual(response.status_code, 200)
AssertionError: 404 != 200

----------------------------------------------------------------------
Ran 3 tests in 0.343s

FAILED (failures=2)
[1]    3318 exit 1     ./test_api.py

Последние два 404 должны быть 200. Это может быть подсказка в том, что я даже не получаю ожидаемые 404-е. К телу ответа должно быть прикреплено какое-то json, но его нет, и на самом деле тип mimetype ['text / html']. Я полностью сбит с толку и совершенно не уверен, что делать дальше. Я бы переключился на pytest, с которым мне повезло больше, но для этого проекта требуется использование unittest.

https://github.com/matthew02/FSND_TriviaAPI/blob/master/backend/test_api.py

https://github.com/matthew02/FSND_TriviaAPI

Ответы [ 2 ]

1 голос
/ 17 июня 2020

У меня заработало. Мне пришлось создать приложение Flask только один раз в качестве атрибута класса, а не создавать новое приложение каждый раз в setUp(). Затем я создал новый test_client() в setUp(), и я смог использовать этого клиента для выполнения запросов. Спасибо всем, кто изучал это вместе со мной.

0 голосов
/ 16 июня 2020

Глядя на документацию здесь:

https://flask.palletsprojects.com/en/1.1.x/testing/

https://flask.palletsprojects.com/en/1.1.x/api/

Кажется, вы должны либо закройте соединение, либо заключите test_client() в блок with, чтобы отложить его. Что-то вроде:

with self.app.test_client() as client:
    response = client.get('/questions')
    print(f'test_get_default_page_of_questions response is {response}')
    self.assertEqual(response.status_code, 200)
...