[ TIL ] no such module, no such table

Hailee·2021년 1월 5일
0

[ TIL ]

목록 보기
32/40
post-thumbnail

2차 프로젝트에 들어서면서, 필수로 진행하게 된 유닛테스트.

다른 사람들은 코드를 어떻게 작성해야할지 모르겠다고들 한다.
하지만 나의 경우는?

코드가 어떻게 작성되었는지도 확인하지 못한 상태였다 🥵

계속해서 발생하는 이상한 에러때문에..!!!!


제일 처음 발생했었던 에러는 ImportError / ModuleNotFountError였다.

👉🏻 ImportError/ModuleNotFoundError

정말 이상하게도, import 해와야 할 user app의 경로를 module로 인식하며, 해당 모듈이 없다는 에러를 계속 반환했다.

검색해보니 프로젝트 최상위 디렉토리의 __init__.py를 삭제하라는 말 뿐이었다.

이게 정말 될까, 하면서 삭제했는데 왠걸. 정말 되는 것이 아닌가.

과연 정말 테스트가 되고 있었던 걸까? 👉🏻 댓츠노노

python -m unittest --v

난 👆🏻 요 명령어를 통해서 테스트를 실행하고있었는데.

단순히 OK 라고 뜨는 것만 확인하고 넘겼었다.
생각해보니, test가 성공했다는 표시인 마침표도 없었고 애초에 Ran 0 tests라고 뜨고있는데!!!
도대체 왜 테스트가 성공하고있었다고 생각한건지 모르겠다 하핳

사실 unittest파이썬의 유닛테스트 모듈인데, 나는 dJangoTestCase를 통해서 유닛테스트를 진행해야 하는 상황.
그런데 파이썬unittest를 사용하고있으니..

애초에 맞지 않는 옷을 찾아놓고 "입으면 맞을거야!" 라고 생각하고 있었던 격..


python manage.py test user.tests

TestCase를 사용하는, 올바른 명령어를 입력하니 새로운 에러가 발생하기 시작했다.

다시 시도 할 때마다, 내가 마주했던 에러는
no such table exists 이러한 에러들...

도대체가 이해 할 수가 없었다.

model도 모두 import 해왔는데, 테스트 데이터베이스도 생성이되는데 왜 테이블만 생성이 안되는 것인가

멘토님들께 질문드렸더니, 공식 문서를 찾아보시면서 도와주셨는데, 그래도 정말 원인을 파악할 수 없었다.
👉🏻 Testing tools (Django documentation)

but 역시나 우리의 멘토님께서는 늘 해답을 알고 계시는데, 그 이유가 정말 충격적이었다.
우선, 나의 상황은 이렇다.

  1. 나는 현재 단 한번도 migrate를 한적이 없다.
    👉🏻 현재 프로젝트는 AWSRDS 서비스를 통해 원격 DB를 두고 사용하고 있기 때문!

  2. 내가 아닌 다른 팀원이 계속해서 migrate를 진행하고, 나는 하지 않기로 했다.
    👉🏻 만에 하나 내가 migrate 파일을 가지고 있을 경우에 git pull을 받으면
    계속해서 conflict가 발생하고, 로컬 데이터베이스를 날려야 하기 때문!!

프로젝트를 진행하는 내내 여러 팀원들이 하나의 DB로 작업을 하니 안정적인 채로 작업할 수 있어서 너무 좋았는데,
이게 내 유닛테스트를 막는 원인이었다.

내 로컬에 생성된 migration 파일 자체가 없으니, migrate를 할 테이블 관련 정보가 없는 것!

내 로컬에 migration 파일을 생성해둔 뒤 유닛테스트를 진행하니 그제서야 정상적으로 테스트가 진행되기 시작했다.

이제 얌전히 에러 잡으러 가면 된다ㅎㅎ


정리하자면,

  1. dJangoTestCase를 통해서 유닛테스트를 하고싶다면 👇🏻 를 사용해야 한다.
python manage.py test user.tests
  1. 테스트 환경에 migration 파일이 생성되어 있어야 한다.
  • 사실 실무에서도 master가 merge해준 최종 branch의 migration 파일을 모두가 나눠서 가지고있는다고 한다.
    그 migration 파일이 각자의 로컬 환경에 존재해야 유닛테스트를 문제없이 돌릴 수 있기 때문!
profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글