Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django test database not auto-flushing

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?

like image 631
pleasedesktop Avatar asked Feb 27 '13 23:02

pleasedesktop


1 Answers

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...

like image 101
Emil Stenström Avatar answered Oct 20 '22 19:10

Emil Stenström