#31414 closed Bug (worksforme)
Django TestCase reads from "production" database with MySQL backend. — at Version 1
Reported by: | Danilo Favato | Owned by: | nobody |
---|---|---|---|
Component: | Testing framework | Version: | 3.0 |
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 (last modified by )
The Django documentation states that:
Finding data from your production database when running tests?
If your code attempts to access the database when its modules are compiled, this will occur before the test database is set up, with potentially unexpected results. For example, if you have a database query in module-level code and a real database exists, production data could pollute your tests.
However, the above mentioned behavior can occur in a brand new Django project using mysql
backend.
How to reproduce the error:
- Start a new project and apply django migrations
- Change database backend to
django.db.backends.mysql
- Create a new user by running
./manage.py createsuperuser
- Add the following test module to the project
Code highlighting:
# test.py from django.test import TestCase from django.contrib.auth.models import User class TestUserCount(TestCase): def test_empty_db(self): self.assertEqual(0, User.objects.count())
The test above fails with AssertionError: 0 != 1
but passes if you use a sqlite
backend.
Environment:
- Python 3.8.1
- Django 3.0.4
- mysqlclient 1.4.6
- MariaDB 10.4.12
Change History (1)
comment:1 by , 5 years ago
Description: | modified (diff) |
---|---|
Resolution: | → needsinfo |
Status: | new → closed |
Summary: | Django TestCase reads from "production" database with MySQL backend → Django TestCase reads from "production" database with MySQL backend. |
I wasn't able to reproduce this issue (tested with both engines
InnoDB
andMyISAM
).