Opened 9 years ago

Last modified 6 months ago

#25504 new Bug

Django test teardown fails when there is no default database

Reported by: Sjoerd Langkemper Owned by:
Component: Testing framework Version: 1.9
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When running a Django TestCase with an empty dict as default database, I get an error. This is similar to #24394, but happens at teardown of the test.

I installed Django 1.9a1, created a new project using django-admin startproject bug. I edited my settings.py to read this:

DATABASES = {
    'default': {},
    'other': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

And I added an empty testcase that uses the Django TestCase class like this:

from django.test.testcases import TestCase

class Test(TestCase):
    def test_nothing(self):
        pass

Then, when I do ./manage test I get the following stacktrace:

Traceback (most recent call last):
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/test/testcases.py", line 217, in __call__
    self._post_teardown()
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/test/testcases.py", line 919, in _post_teardown
    self._fixture_teardown()
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/test/testcases.py", line 1072, in _fixture_teardown
    return super(TestCase, self)._fixture_teardown()
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/test/testcases.py", line 955, in _fixture_teardown
    inhibit_post_migrate=inhibit_post_migrate)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 119, in call_command
    return command.execute(*args, **defaults)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/core/management/commands/flush.py", line 49, in handle
    allow_cascade=allow_cascade)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/core/management/sql.py", line 15, in sql_flush
    tables = connection.introspection.django_table_names(only_existing=True, include_views=False)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/db/backends/base/introspection.py", line 86, in django_table_names
    existing_tables = self.table_names(include_views=include_views)
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/db/backends/base/introspection.py", line 56, in table_names
    with self.connection.cursor() as cursor:
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 233, in cursor
    cursor = self.make_cursor(self._cursor())
  File "/home/sjoerd/.virtualenvs/b24394/local/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 21, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

Change History (8)

comment:1 by Tim Graham, 9 years ago

Component: UncategorizedTesting framework
Triage Stage: UnreviewedAccepted
Type: UncategorizedBug

comment:2 by mihaicc, 9 years ago

Owner: changed from nobody to mihaicc
Status: newassigned

comment:3 by mihaicc, 9 years ago

I didn't manage to finish this ticket.

Progress so far:

  • have 2 tests (one broader and one narrower to the exception)
  • found out this happens for fixtures setup as well
  • debated two solutions with Michael Manfre and Tim and will follow soon with a pull request

comment:4 by Tim Graham, 9 years ago

Version: 1.9a11.9

comment:5 by Tim Graham, 8 years ago

mihaicc, can you share a link to your work so others could use it as a starting point if you're unable to finish it?

comment:6 by mihaicc, 6 years ago

Owner: mihaicc removed
Status: assignednew

comment:7 by bcail, 7 months ago

There seems to be a conflict in the documentation for this issue of a blank 'default' database. In the Settings docs, it says: "The DATABASES setting must configure a default database; any number of additional databases may also be specified."

But the multiple database setup docs still explicitly gives the example of leaving the 'default' database blank.

What's the path forward on this?

Note: See TracTickets for help on using tickets.
Back to Top