Django test database not auto-flushing
Asked Answered
S

1

7

I have a bunch of unit test files, all of which consist of django.test.TestCase classes.

Wrote myself a little shell script to uncomment/comment test file imports in my __init__.py file, so I can run tests from certain test files, based off the command line arguments I give it. I am also able to run all the tests of all the test files in one go (for regression testing purposes).

I have this one test file that has some JSON fixtures and the first test checks that a certain model/table has 3 records in it (defined by the JSON fixture).

So here is the problem: when I run this test file on its own its tests pass with flying colours, but when I run the test with all other tests, that particular test case I mentioned, fails.

When I run all the tests, the database says there are 6 records in the table/model, but there should only be 3 (from the fixture), like when the test file is run by itself.

I also tried running the that test file with a few other test files (not all) and it passes. So the only time it doesn't, is when all the test files are run.

To me this seems like a bug in Django or PostgreSQL (DB I am using), because aren't Django TestCases supposed to auto-flush/reset the database between each test method, let alone test class?

Sherrell answered 27/2, 2013 at 23:47 Comment(1)
This is unlikely to be a bug in PostgreSQL so I would suggest following up with the Django team. From your description it sounds like a rollback you are expecting to happen is not being done.Gossamer
G
1

This is likely due to the difference in how cleanup is done between TestCase and TransactionTestCase in Django. Before Django 1.5 TransactionTestCases needed to be run after TestCases (and Djangos testunner did that for you). This should be fixed in 1.5 though, so try running your tests again there...

Garner answered 3/7, 2013 at 10:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.