#30084 closed Bug (invalid)
Setting DATABASES['default']['TEST']['engine'] to SQLite does not cause Django to use an in-memory database as expected
Reported by: | mrts | Owned by: | nobody |
---|---|---|---|
Component: | Testing framework | Version: | 2.1 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Preconditions
Given the following settings:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'database', ... 'TEST': { 'ENGINE': 'django.db.backends.sqlite3', } } }
Actual
When I run ./manage.py test
in a restricted environment, then I get the following error:
$ ./manage.py test Creating test database for alias 'default'... Got an error creating the test database: permission denied to create database Type 'yes' if you would like to try deleting the test database 'test_database', or 'no' to cancel: yes Destroying old test database 'default'... Got an error recreating the test database: database "test_database" does not exist
Expected
The documentation says:
The default test database names are created by prepending
test_
to the value of each NAME in DATABASES. When using SQLite, the tests will use an in-memory database by default (i.e., the database will be created in memory, bypassing the filesystem entirely!).
Thus, my expectation was that setting DATABASES['default']['TEST']['engine']
to SQLite will use an in-memory database.
Change History (6)
comment:1 by , 6 years ago
Summary: | Setting DATABASES['default']['TEST']['engine'] to SQLite does not cause Django to use an in-memory database if DATABASES['default']['NAME'] is given → Setting DATABASES['default']['TEST']['engine'] to SQLite does not cause Django to use an in-memory database as expected |
---|
comment:2 by , 6 years ago
follow-up: 4 comment:3 by , 6 years ago
Component: | Uncategorized → Testing framework |
---|---|
Resolution: | → invalid |
Status: | new → closed |
Type: | Uncategorized → Bug |
'ENGINE'
isn't a supported option in 'TEST'
:
Aside from using a separate database, the test runner will otherwise use all of the same database settings you have in your settings file: ENGINE, USER, HOST, etc.
You should use a separate settings file when testing if you want to use a different database backend.
comment:4 by , 6 years ago
Replying to Tim Graham:
'ENGINE'
isn't a supported option in'TEST'
:
Aside from using a separate database, the test runner will otherwise use all of the same database settings you have in your settings file: ENGINE, USER, HOST, etc.
You should use a separate settings file when testing if you want to use a different database backend.
Thanks for clarifying! This is not clear from the documentation section that you referred to. Should I submit a documentation patch?
comment:5 by , 6 years ago
I'm not sure if clarification is required. The sentence is clear to me and there's no documentation for a TEST['ENGINE']
setting.
There is a workaround documented here:
https://stackoverflow.com/a/3098182/258772
But this is complex and fragile.