django tests setUp and --keepdb

1.1k Views Asked by At

I have many, many migrations I can't delete. So when I run the tests it takes too much time unless I run them with --keepdb which is perfect. The only question is how does --keepdb and the setUp method work together. In the setUp method of the test I do something like this:

class APITests(APITestCase):

    fixtures = ['tests/testdata.json']

    def setUp(self):
        username = "test"
        password = "1234"

        user_created = User.objects.create_user(username=username, password=password)

        body = {
            "username": username,
            "password": password
        }

        cart = Cart.objects.create()
        Client.objects.create(user=user_created, cart=cart)

APITestCase is just a django rest framework wrapper for the django test class. I create a user, a client and a cart for that user. If I re-run the tests with --keepdb, will the setUp method create a duplicated user or cart? how does it work in this case?

1

There are 1 best solutions below

0
On BEST ANSWER

The setUp method runs before every test case in your APITests. Because each test runs in a transaction, any objects created are destroyed at the end of each test.

The keepdb option does not affect this at all.

You might be able to use setupTestData to make your tests more efficient.