Приложение Flask, созданное дважды во время тестирования Python - PullRequest
0 голосов
/ 31 мая 2018

У меня есть файл app.py, который создает приложение фляги

def create_app():
       app = Flask(__name__)
       return app

Я пытаюсь написать юнит-тест для моего модуля, и ниже файл

from app import create_app
class TestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app()
        self.client = self.app.test_client()
        ctx = self.app.app_context()
        ctx.push()

    def test_healthcheck(self):
        res = self.client.get("/")
        self.assertEqual(res.status_code, 200)

    def test_tenant_creation(self):
        res = self.client.post("/tenants")
        self.assertEqual(res.status_code, 200)

Когда язапустить отдельные методы тестирования, он работает нормально.Но когда я запускаю весь тестовый пример, приложение create вызывается снова, что вызывает проблемы, поскольку мое приложение create имеет зависимости, которые необходимо вызывать только один раз.

Возможно ли создать приложение только один раз?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

ИМО, проблема может быть связана с контекстом.Вы должны создать tearDown() метод для уничтожения контекста приложения, который вы создали в setUp():

class TestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app()
        self.client = self.app.test_client()
        self.ctx = self.app.app_context()
        self.ctx.push()

    def tearDown(self):
        self.ctx.pop()
0 голосов
/ 31 мая 2018

setUp вызывается перед каждым тестовым методом.Поэтому, если вы запустите весь тестовый пример, он будет вызван дважды (по одному для каждого метода теста).

Чтобы запустить что-то только один раз для TestCase, вы можете попробовать переопределить метод __init__ (см. этот вопрос SO ), или setUpClass или setUpModule .YMMV, в зависимости от того, какую версию Python и участников тестирования вы используете.

...