> Me again. Still helping clients TDD despite obese databases. [localhost] run: python manage.py test --settings=test_settings my_app --verbosity=0 ---------------------------------------------------------------------- Ran 2 tests in 0.018s
OK Eat my vapor trail, b-words! Here's how I did it: Upgrade the settings.py to use the TEST_NAME option: DATABASES = { 'default': { 'NAME': 'test_myapp.db', 'TEST_NAME': 'test_myapp.db', 'ENGINE': 'django.db.backends.sqlite3', ... Then wedge the test runner methods that were destroying and rebuilding the database: def setup_databases(self, **kwargs): from django.db import connections old_names = [] mirrors = [] for alias in connections: connection = connections[alias] # If the database is a test mirror, redirect it's connection # instead of creating a test database. if connection.settings_dict['TEST_MIRROR']: mirrors.append((alias, connection)) mirror_alias = connection.settings_dict['TEST_MIRROR'] connections._connections[alias] = connections[mirror_alias] else: old_names.append((connection, connection.settings_dict['NAME'])) # connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive) return old_names, mirrors def teardown_databases(self, old_config, **kwargs): from django.db import connections old_names, mirrors = old_config # Point all the mirrors back to the originals for alias, connection in mirrors: connections._connections[alias] = connection # Destroy all the non-mirror databases # for connection, old_name in old_names: # connection.creation.destroy_test_db(old_name, self.verbosity) from django.test.simple import DjangoTestSuiteRunner DjangoTestSuiteRunner.setup_databases = setup_databases DjangoTestSuiteRunner.teardown_databases = teardown_databases The next thing I'll need to do is rebuild the database only if the models or .json files change. I could add that to the wedge methods, above, or I could simply add a "make" like system to the fabric fabfile.py that runs the test: def test(): # TODO Check file time of test_myapp.db. If it's less than my_app/models.py # or my_app/fixtures/my_app_database.json, rebuild the db file _sh('python manage.py test --settings=test_settings my_app -- verbosity=0') This system now fully exploits sqlite3, especially its ability to treat a transaction as a virtual ":memory:" database. It does not even change the file time on the .db file when the tests run. Could someone better at Django internals than me package this system up and contrib it? -- Phlip http://c2.com/cgi/wiki?ZeekLand -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.