So I wanted to run my django test scripts against my development database. The django test system really wants to create a database from scratch but I wanted to see whether I could run against my local scratch copy since its already got a lot of data in it and I am too lazy to make fixtures etc.
Some googling produced alot of very helpful “You are doing it wrong!” comments which is fine as far as that goes but I am not good at taking advice.
Digging a little deeper I found you can override the DjangoTestSuiteRunner. Now we are getting somewhere.
put this in settings.py:
TEST_RUNNER = 'myapp.test_extras.NoTestDbDatabaseTestRunner'
And then define the NoTestDbDatabaseTestRunner:
from django.test.simple import DjangoTestSuiteRunner
class NoTestDbDatabaseTestRunner(DjangoTestSuiteRunner):
def setup_databases(self, **kwargs):
pass
def teardown_databases(self, old_config, **kwargs):
pass
I’m feeling pretty good about this. I try a simple “test” which just counts the number of items in a particular table.
Only what I get is a completely wiped out local db. Nice.
The trick is that my TestCase was using
from django.test import TestCase
which has its own ideas about what to do with the database and it was wiping it out. Switching to:
unittest.TestCase
or
from django.test import SimpleTestCase
if you are using django trunk. Looks like it fixes the problem, but it doesn’t make me feel any better.
Maybe I should just listen more.
Leave a Reply