Search

[django, drf] unit test 실행 시 에러 (Got an error creating the test database: database already exists)

타입
트러블슈팅
태그
django
drf
상태
Published
생성일
2023/02/24 10:53
최종 편집 일시
2023/07/18 01:44
2 more properties

이슈 상황

어느 날부터 gitlab ci/cd 의 test job 에서 failed 가 떴다.
Creating test database for alias 'default'... Got an error creating the test database: database "test_~~~" already exists Type 'yes' if you would like to try deleting the test database 'test_~~~', or 'no' to cancel: Traceback (most recent call last):
Plain Text
복사
test database 가 존재해서 test database 를 생성하는데에 에러가 발생했다고 뜬다.

이슈 원인

커맨드로 yes or no 를 입력해야하는데 ci/cd runner 에서 따로 입력하는게 없으니 job 이 failed 가 된 것이다.
Command 의 handle 함수를 오버라이딩 한다.
django 에서 test 를 할 시, 기본적으로 test_[DB이름] 의 database 가 만들어지고 test 가 종료되면 해당 database 를 삭제한다.
그런데 test 가 비정상적으로 종료됐을 때는, test db 가 삭제되지 않는다.
따라서 새롭게 test 를 돌릴 때 test database 가 이미 존재한다고 뜬다.

이슈 해결

custom command 를 통해 non-interactive 모드로 실행되게끔 한다.
[app이름]/management/commands/test.py
from django.core.management.commands.test import Command as BaseCommand class Command(BaseCommand): def handle(self, *test_labels, **options): # Wrap Django's built-in test command to always delete the database if # it exists options["interactive"] = False return super().handle(*test_labels, **options)
Python
복사
test database 가 이미 존재한다고 error 가 나긴하지만, old test database 를 삭제해준다.

Reference