tests.py

test code 작성 중 오류가 발생했다.
처음 작성해서 그런지 한참을 헤맨 간단하고 기본적이지만 몰랐던 오류!

오류코드

class DiaryUploadAPIViewTestCase(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user_data = {"email":"testdiary@gmail.com",
                         "nickname":"test",
                         "password":"password"
                         }
        cls.diary_data = {"title":"test title","content":"test content"}
        cls.user = User.objects.create_user("testdiary@gmail.com", "password", "test")
        cls.diary = Diary.objects.create(**cls.diary_data, user=cls.user)

코드상으로 문제가 없어 보이는데 아래와 같은 오류가 계속 발생했다.

access token을 계속 찾지 못하고 있어서 로그인과 회원가입의 문제라고 생각은 했지만 갈피를 못 잡고 있었다.

여러 시도들

혼자 두 시간 끙끙 댔지만 방법을 모르겠다..

def setUp(self):
    self.access_token = self.client.post(
        reverse("users:token_obtain_pair"), self.user_data).data["access"]

처음엔 setUp이 잘못 된 줄 알고

def setUp(self):
    response = self.client.post(
        reverse("token_obtain_pair"), self.user_data)
    self.access_token = response.data.get("access")

이렇게 response에 담아서 해봤는데 test가 돌아가서 해결한 줄 알았다.

하지만 self.access_token 값이 없어서 다음 진도가 나가지 않았음.

cls.user = User.objects.create_user("testdiary@gmail.com", "test", "password")

여기서 test@gmail.com으로 오타가 있어서 발견하고 이거구나 싶어서 수정 했지만 그래도 동일했다.

하지만 이것 또한 오류는 맞았어서 오탈자를 잘 확인하자는 다짐을 또 하게 되었다.

해결방법

user.models.py
...

class UserManager(BaseUserManager):
    def create_superuser(self, email, nickname, password=None):

        user = self.create_user(
            email,
            nickname=nickname,
            password=password,
        )
        user.is_admin = True
        user.save(using=self._db)
        return user

생각지도 못했다.. test code에서 create_user를 할 때 이 user model에서 가져오는데 순서가

  1. email
  2. nickname
  3. password

되어 있어서

class DiaryUploadAPIViewTestCase(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user_data = {"email":"testdiary@gmail.com",
                         "nickname":"test",
                         "password":"password"
                         }
        cls.diary_data = {"title":"test title","content":"test content"}
        cls.user = User.objects.create_user("testdiary@gmail.com", "password", "test")
        cls.diary = Diary.objects.create(**cls.diary_data, user=cls.user)

여기서
User.objects.create_user("testdiary@gmail.com", "password", "test")
이 부분을
User.objects.create_user("testdiary@gmail.com", "test", "password")
이렇게 email > nickname > password 순서로 해야 한다..

후...

이렇게 또 하나 배웠는데, 이런 기본적인 개념을 알게 될 때마다 아쉽다..!!
이러한 사소한 개념들을 얼마나 아느냐가 코드 이해의 기반이 된다고 생각되어 꾸준히 공부 할 예정이다.

가보자고!!

profile
가보자고

0개의 댓글