geekops
geekops

Reputation: 515

Flask app created twice during python unittest

I have an app.py file which creates an flask app

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

I am trying to write an unittest for my module and below is the file

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)

When i run individual test methods it is working fine. But when i run the entire test case , the create app is called again which causes issues since my create app has dependencies which needs to be called only once.

Is it possible to create app only once ?

Upvotes: 0

Views: 711

Answers (2)

Grey Li
Grey Li

Reputation: 12762

IMO, the problem may related with context. You should create a tearDown() method to destroy the application context you created in 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()

Upvotes: -1

user3089519
user3089519

Reputation:

setUp gets called before each test method. Therefore, if you run the whole test case, it will be called twice (one for each test method).

To run something only once for the TestCase, you could try overriding the __init__ method (see this SO question), or setUpClass or setUpModule. YMMV depending on which python version and test runners you are using.

Upvotes: 1

Related Questions