I wanted to actually write some tests for my application as I didn’t have any. I wrote a few quick tests, modelling them after the “animal” example on the “writing and running tests” page.
class EventsTestCase(TestCase):
def setUp(self):
Events.objects.create(
id="19780919-01",
date=datetime.strptime("1978-09-19", "%Y-%m-%d"),
)
def test_event_get_date(self):
"""Check create event and date."""
event = Events.objects.get(id="19780919-01")
self.assertEqual(event.get_date(), "1978-09-19 [Tue]")
No matter the model used, all of them fail with some variation on the error django.db.utils.ProgrammingError: relation “events” does not exist.
In my searching, I found a few similar errors and posts which say to run makemigrations beforehand, which doesn’t work. I’ve deleted the migration files and re-ran that a few times, still nothing. Even truncated the django_migrations table, all to no avail.
I think it has to do with the fake “test database” just not creating the specified table at all for some reason. Setting verbosity to 3 on the test command still gives the same end error with nothing about a table failing to create.
I am on Python 3.12.10 and Django 5.2.10.
Here is the full error traceback:
Found 1 test(s).
Creating test database for alias 'default' ('test_databruce')...
Operations to perform:
Synchronize unmigrated apps: django_browser_reload, django_filters, messages, postgres, rest_framework, sitemaps, staticfiles
Apply all migrations: admin, auth, contenttypes, databruce, sessions, shortener, sites
Running pre-migrate handlers for application admin
Running pre-migrate handlers for application auth
Running pre-migrate handlers for application contenttypes
Running pre-migrate handlers for application sessions
Running pre-migrate handlers for application sites
Running pre-migrate handlers for application databruce
Running pre-migrate handlers for application shortener
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Running migrations:
Applying contenttypes.0001_initial... OK (0.015s)
Applying auth.0001_initial... OK (0.032s)
Applying admin.0001_initial... OK (0.015s)
Applying admin.0002_logentry_remove_auto_add... OK (0.000s)
Applying admin.0003_logentry_add_action_flag_choices... OK (0.016s)
Applying contenttypes.0002_remove_content_type_name... OK (0.000s)
Applying auth.0002_alter_permission_name_max_length... OK (0.016s)
Applying auth.0003_alter_user_email_max_length... OK (0.000s)
Applying auth.0004_alter_user_username_opts... OK (0.000s)
Applying auth.0005_alter_user_last_login_null... OK (0.015s)
Applying auth.0006_require_contenttypes_0002... OK (0.000s)
Applying auth.0007_alter_validators_add_error_messages... OK (0.000s)
Applying auth.0008_alter_user_username_max_length... OK (0.016s)
Applying auth.0009_alter_user_last_name_max_length... OK (0.000s)
Applying auth.0010_alter_group_name_max_length... OK (0.000s)
Applying auth.0011_update_proxy_permissions... OK (0.015s)
Applying auth.0012_alter_user_first_name_max_length... OK (0.000s)
Applying databruce.0001_initial... OK (0.047s)
Applying sessions.0001_initial... OK (0.000s)
Applying shortener.0001_initial... OK (0.032s)
Applying shortener.0002_auto_20190528_1522... OK (0.015s)
Applying shortener.0003_auto_20190528_1558... OK (0.016s)
Applying shortener.0004_alter_urlprofile_enabled... OK (0.000s)
Applying shortener.0005_alter_urlmap_id_alter_urlprofile_id... OK (0.031s)
Applying sites.0001_initial... OK (0.016s)
Applying sites.0002_alter_domain_unique... OK (0.000s)
Running post-migrate handlers for application admin
Adding content type 'admin | logentry'
Adding permission 'Permission object (1)'
Adding permission 'Permission object (2)'
Adding permission 'Permission object (3)'
Adding permission 'Permission object (4)'
Running post-migrate handlers for application auth
Adding content type 'auth | permission'
Adding content type 'auth | group'
Adding content type 'auth | user'
Adding permission 'Permission object (5)'
Adding permission 'Permission object (6)'
Adding permission 'Permission object (7)'
Adding permission 'Permission object (8)'
Adding permission 'Permission object (9)'
Adding permission 'Permission object (10)'
Adding permission 'Permission object (11)'
Adding permission 'Permission object (12)'
Adding permission 'Permission object (13)'
Adding permission 'Permission object (14)'
Adding permission 'Permission object (15)'
Adding permission 'Permission object (16)'
Running post-migrate handlers for application contenttypes
Adding content type 'contenttypes | contenttype'
Adding permission 'Permission object (17)'
Adding permission 'Permission object (18)'
Adding permission 'Permission object (19)'
Adding permission 'Permission object (20)'
Running post-migrate handlers for application sessions
Adding content type 'sessions | session'
Adding permission 'Permission object (21)'
Adding permission 'Permission object (22)'
Adding permission 'Permission object (23)'
Adding permission 'Permission object (24)'
Running post-migrate handlers for application sites
Adding content type 'sites | site'
Adding permission 'Permission object (25)'
Adding permission 'Permission object (26)'
Adding permission 'Permission object (27)'
Adding permission 'Permission object (28)'
Creating example.com Site object
Resetting sequence
Running post-migrate handlers for application databruce
Adding content type 'databruce | archivelinks'
Adding content type 'databruce | authgroup'
Adding content type 'databruce | authgrouppermissions'
Adding content type 'databruce | authpermission'
Adding content type 'databruce | authuser'
Adding content type 'databruce | authusergroups'
Adding content type 'databruce | authuseruserpermissions'
Adding content type 'databruce | bands'
Adding content type 'databruce | bootlegs'
Adding content type 'databruce | bootlegsbydate'
Adding content type 'databruce | cities'
Adding content type 'databruce | continents'
Adding content type 'databruce | countries'
Adding content type 'databruce | covers'
Adding content type 'databruce | djangoadminlog'
Adding content type 'databruce | djangocontenttype'
Adding content type 'databruce | djangomigrations'
Adding content type 'databruce | djangosession'
Adding content type 'databruce | events'
Adding content type 'databruce | guests'
Adding content type 'databruce | lyrics'
Adding content type 'databruce | notes'
Adding content type 'databruce | nugsreleases'
Adding content type 'databruce | onstage'
Adding content type 'databruce | onstagebandmembers'
Adding content type 'databruce | openersclosers'
Adding content type 'databruce | premieredebut'
Adding content type 'databruce | relations'
Adding content type 'databruce | releasediscs'
Adding content type 'databruce | releases'
Adding content type 'databruce | releasetracks'
Adding content type 'databruce | runs'
Adding content type 'databruce | setlistentries'
Adding content type 'databruce | setlists'
Adding content type 'databruce | setlistsbysetanddate'
Adding content type 'databruce | siteupdates'
Adding content type 'databruce | snippets'
Adding content type 'databruce | songs'
Adding content type 'databruce | songsafterrelease'
Adding content type 'databruce | songspagenew'
Adding content type 'databruce | states'
Adding content type 'databruce | studiosessions'
Adding content type 'databruce | tags'
Adding content type 'databruce | tourcounts'
Adding content type 'databruce | tourlegs'
Adding content type 'databruce | tours'
Adding content type 'databruce | updates'
Adding content type 'databruce | userattendedshows'
Adding content type 'databruce | venues'
Adding content type 'databruce | setlistsbydate'
Adding content type 'databruce | setlistnotes'
Adding content type 'databruce | songspage'
Adding content type 'databruce | venuestext'
Adding permission 'Permission object (29)'
Adding permission 'Permission object (30)'
Adding permission 'Permission object (31)'
Adding permission 'Permission object (32)'
Adding permission 'Permission object (33)'
Adding permission 'Permission object (34)'
Adding permission 'Permission object (35)'
Adding permission 'Permission object (36)'
Adding permission 'Permission object (37)'
Adding permission 'Permission object (38)'
Adding permission 'Permission object (39)'
Adding permission 'Permission object (40)'
Adding permission 'Permission object (41)'
Adding permission 'Permission object (42)'
Adding permission 'Permission object (43)'
Adding permission 'Permission object (44)'
Adding permission 'Permission object (45)'
Adding permission 'Permission object (46)'
Adding permission 'Permission object (47)'
Adding permission 'Permission object (48)'
Adding permission 'Permission object (49)'
Adding permission 'Permission object (50)'
Adding permission 'Permission object (51)'
Adding permission 'Permission object (52)'
Adding permission 'Permission object (53)'
Adding permission 'Permission object (54)'
Adding permission 'Permission object (55)'
Adding permission 'Permission object (56)'
Adding permission 'Permission object (57)'
Adding permission 'Permission object (58)'
Adding permission 'Permission object (59)'
Adding permission 'Permission object (60)'
Adding permission 'Permission object (61)'
Adding permission 'Permission object (62)'
Adding permission 'Permission object (63)'
Adding permission 'Permission object (64)'
Adding permission 'Permission object (65)'
Adding permission 'Permission object (66)'
Adding permission 'Permission object (67)'
Adding permission 'Permission object (68)'
Adding permission 'Permission object (69)'
Adding permission 'Permission object (70)'
Adding permission 'Permission object (71)'
Adding permission 'Permission object (72)'
Adding permission 'Permission object (73)'
Adding permission 'Permission object (74)'
Adding permission 'Permission object (75)'
Adding permission 'Permission object (76)'
Adding permission 'Permission object (77)'
Adding permission 'Permission object (78)'
Adding permission 'Permission object (79)'
Adding permission 'Permission object (80)'
Adding permission 'Permission object (81)'
Adding permission 'Permission object (82)'
Adding permission 'Permission object (83)'
Adding permission 'Permission object (84)'
Adding permission 'Permission object (85)'
Adding permission 'Permission object (86)'
Adding permission 'Permission object (87)'
Adding permission 'Permission object (88)'
Adding permission 'Permission object (89)'
Adding permission 'Permission object (90)'
Adding permission 'Permission object (91)'
Adding permission 'Permission object (92)'
Adding permission 'Permission object (93)'
Adding permission 'Permission object (94)'
Adding permission 'Permission object (95)'
Adding permission 'Permission object (96)'
Adding permission 'Permission object (97)'
Adding permission 'Permission object (98)'
Adding permission 'Permission object (99)'
Adding permission 'Permission object (100)'
Adding permission 'Permission object (101)'
Adding permission 'Permission object (102)'
Adding permission 'Permission object (103)'
Adding permission 'Permission object (104)'
Adding permission 'Permission object (105)'
Adding permission 'Permission object (106)'
Adding permission 'Permission object (107)'
Adding permission 'Permission object (108)'
Adding permission 'Permission object (109)'
Adding permission 'Permission object (110)'
Adding permission 'Permission object (111)'
Adding permission 'Permission object (112)'
Adding permission 'Permission object (113)'
Adding permission 'Permission object (114)'
Adding permission 'Permission object (115)'
Adding permission 'Permission object (116)'
Adding permission 'Permission object (117)'
Adding permission 'Permission object (118)'
Adding permission 'Permission object (119)'
Adding permission 'Permission object (120)'
Adding permission 'Permission object (121)'
Adding permission 'Permission object (122)'
Adding permission 'Permission object (123)'
Adding permission 'Permission object (124)'
Adding permission 'Permission object (125)'
Adding permission 'Permission object (126)'
Adding permission 'Permission object (127)'
Adding permission 'Permission object (128)'
Adding permission 'Permission object (129)'
Adding permission 'Permission object (130)'
Adding permission 'Permission object (131)'
Adding permission 'Permission object (132)'
Adding permission 'Permission object (133)'
Adding permission 'Permission object (134)'
Adding permission 'Permission object (135)'
Adding permission 'Permission object (136)'
Adding permission 'Permission object (137)'
Adding permission 'Permission object (138)'
Adding permission 'Permission object (139)'
Adding permission 'Permission object (140)'
Adding permission 'Permission object (141)'
Adding permission 'Permission object (142)'
Adding permission 'Permission object (143)'
Adding permission 'Permission object (144)'
Adding permission 'Permission object (145)'
Adding permission 'Permission object (146)'
Adding permission 'Permission object (147)'
Adding permission 'Permission object (148)'
Adding permission 'Permission object (149)'
Adding permission 'Permission object (150)'
Adding permission 'Permission object (151)'
Adding permission 'Permission object (152)'
Adding permission 'Permission object (153)'
Adding permission 'Permission object (154)'
Adding permission 'Permission object (155)'
Adding permission 'Permission object (156)'
Adding permission 'Permission object (157)'
Adding permission 'Permission object (158)'
Adding permission 'Permission object (159)'
Adding permission 'Permission object (160)'
Adding permission 'Permission object (161)'
Adding permission 'Permission object (162)'
Adding permission 'Permission object (163)'
Adding permission 'Permission object (164)'
Adding permission 'Permission object (165)'
Adding permission 'Permission object (166)'
Adding permission 'Permission object (167)'
Adding permission 'Permission object (168)'
Adding permission 'Permission object (169)'
Adding permission 'Permission object (170)'
Adding permission 'Permission object (171)'
Adding permission 'Permission object (172)'
Adding permission 'Permission object (173)'
Adding permission 'Permission object (174)'
Adding permission 'Permission object (175)'
Adding permission 'Permission object (176)'
Adding permission 'Permission object (177)'
Adding permission 'Permission object (178)'
Adding permission 'Permission object (179)'
Adding permission 'Permission object (180)'
Adding permission 'Permission object (181)'
Adding permission 'Permission object (182)'
Adding permission 'Permission object (183)'
Adding permission 'Permission object (184)'
Adding permission 'Permission object (185)'
Adding permission 'Permission object (186)'
Adding permission 'Permission object (187)'
Adding permission 'Permission object (188)'
Adding permission 'Permission object (189)'
Adding permission 'Permission object (190)'
Adding permission 'Permission object (191)'
Adding permission 'Permission object (192)'
Adding permission 'Permission object (193)'
Adding permission 'Permission object (194)'
Adding permission 'Permission object (195)'
Adding permission 'Permission object (196)'
Adding permission 'Permission object (197)'
Adding permission 'Permission object (198)'
Adding permission 'Permission object (199)'
Adding permission 'Permission object (200)'
Adding permission 'Permission object (201)'
Adding permission 'Permission object (202)'
Adding permission 'Permission object (203)'
Adding permission 'Permission object (204)'
Adding permission 'Permission object (205)'
Adding permission 'Permission object (206)'
Adding permission 'Permission object (207)'
Adding permission 'Permission object (208)'
Adding permission 'Permission object (209)'
Adding permission 'Permission object (210)'
Adding permission 'Permission object (211)'
Adding permission 'Permission object (212)'
Adding permission 'Permission object (213)'
Adding permission 'Permission object (214)'
Adding permission 'Permission object (215)'
Adding permission 'Permission object (216)'
Adding permission 'Permission object (217)'
Adding permission 'Permission object (218)'
Adding permission 'Permission object (219)'
Adding permission 'Permission object (220)'
Adding permission 'Permission object (221)'
Adding permission 'Permission object (222)'
Adding permission 'Permission object (223)'
Adding permission 'Permission object (224)'
Adding permission 'Permission object (225)'
Adding permission 'Permission object (226)'
Adding permission 'Permission object (227)'
Adding permission 'Permission object (228)'
Adding permission 'Permission object (229)'
Adding permission 'Permission object (230)'
Adding permission 'Permission object (231)'
Adding permission 'Permission object (232)'
Adding permission 'Permission object (233)'
Adding permission 'Permission object (234)'
Adding permission 'Permission object (235)'
Adding permission 'Permission object (236)'
Adding permission 'Permission object (237)'
Adding permission 'Permission object (238)'
Adding permission 'Permission object (239)'
Adding permission 'Permission object (240)'
Running post-migrate handlers for application shortener
Adding content type 'shortener | urlmap'
Adding content type 'shortener | urlprofile'
Adding permission 'Permission object (241)'
Adding permission 'Permission object (242)'
Adding permission 'Permission object (243)'
Adding permission 'Permission object (244)'
Adding permission 'Permission object (245)'
Adding permission 'Permission object (246)'
Adding permission 'Permission object (247)'
Adding permission 'Permission object (248)'
System check identified no issues (0 silenced).
test_event_get_date (databruce.tests.EventsTestCase.test_event_get_date)
Check create event and date. ... ERROR
======================================================================
ERROR: test_event_get_date (databruce.tests.EventsTestCase.test_event_get_date)
Check create event and date.
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\psycopg\cursor.py", line 97, in execute
raise ex.with_traceback(None)
psycopg.errors.UndefinedTable: relation "events" does not exist
LINE 1: INSERT INTO "events" ("created_at", "updated_at", "event_num...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\databruce\tests.py", line 11, in setUp
Events.objects.create(
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\query.py", line 665, in create
obj.save(force_insert=True, using=self.db)
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\base.py", line 902, in save
self.save_base(
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\base.py", line 1008, in save_base
updated = self._save_table(
^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\base.py", line 1169, in _save_table
results = self._do_insert(
^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\base.py", line 1210, in _do_insert
return manager._insert(
^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\query.py", line 1873, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1882, in execute_sql
cursor.execute(sql, params)
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
with self.db.wrap_database_errors:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[USER]\Documents\Software\Programming\Django\django-databruce\.venv\Lib\site-packages\psycopg\cursor.py", line 97, in execute
raise ex.with_traceback(None)
django.db.utils.ProgrammingError: relation "events" does not exist
LINE 1: INSERT INTO "events" ("created_at", "updated_at", "event_num...
^
----------------------------------------------------------------------
Ran 1 test in 0.008s
FAILED (errors=1)
Destroying test database for alias 'default' ('test_databruce')...