Pytest and Django, proper method for creating module scoped fixtures

Viewed 84

pytest module scoped fixtures that use the django test database are perplexing us. We want a fixture, that creates an entry in the database, once per test module.

This works, but it's very clunky:

import pytest

@pytest.fixture(scope='module')
def site(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        address = models.Address.create(..)
        site = models.Site.create(address=address, ..)

    yield site

    with django_db_blocker.unblock():
        site.delete()
        address.delete()

We've noticed that django_db_setup is required, because if this fixture is the first one called, the test database won't be set up and the fixture will be created in the non-test database!

For complicated objects that have more than one or two related models, the fixture becomes very ugly.

Is there a better way to do this?

0 Answers
Related