본문 바로가기
AI 웹개발반/Python, Django

[Django] raise serializers.ValidationError 사용 시 assertEqual로 에러 메세지 비교하기

by 째깍단 2023. 7. 1.

시간 유효성 체크 함수 개선 및 테스트코드를 맞추어 수정하며 알게된 것.

 

 

 

 

 

- 1 -

 

시간유효성 체크를 위해, 함수를 작성하며 사용했던 ValidationError

 

raise serializers.ValidationError 를 사용할 경우 status는 400_Bad_Request 에러를 뱉는다 

 

 

 

 

 

 

 

- 2 -

 

테스트 코드를 수정하면서 가져온 오류 메세지를 assertEqual로 비교하고 싶었다.

 

가져오는 응답 메세지는 아래와 같이 출력된다.

 

print("⭐️", response.data)

⭐️ {'error': ErrorDetail(string='모집 시작시간 오류. 현재 이후의 시점을 선택해주세요, code='invalid')}

 

 

response.data["error"] 로 출력하면 value값에 있는 내용이 모두 출력되며 에러 메세지만을 비교할 수 없다.

 

>>> ErrorDetail(string='모집 시작시간 오류. 현재 이후의 시점을 선택해주세요, code='invalid'

 

 

 

 

 

 

에러 메세지를 가져다 쓰는 방법을 세 가지 정도를 찾아 테스트해보았다.

 

1)  .title()

2)  str(error)

3)  response.data['key'][0]

 

 

def test_create_grouppurchase_feed_open_fail(self):
        """공구 게시글 open 시간이 현재시간보다 느리게 생성"""
        response = self.client.post(
            path=self.path,
            data=self.grouppurchase_data_open_fail,
            HTTP_AUTHORIZATION=f"Bearer {self.access_token}",
        )
        self.assertEqual( -- 여기에 위의 3가지 방법을 적용 -- ), "모집 시작시간 오류. 현재 이후의 시점을 선택해주세요.")
        self.assertEqual(response.status_code, 400)

 

 

 

 

 

1) .title()  굿 ✅

 

self.assertEqual(response.data['error'].title(), "공구 시작 시간보다 이후의 시점을 선택해주세요.")

 

 

 

 

2) str(error)  굿 ✅

 

self.assertEqual(str(response.data['error']), "공구 시작 시간보다 이후의 시점을 선택해주세요.")

 

 

 

 

3) response.data['key'][0] 는 fail  ❌

 

 

self.assertEqual(response.data['error'][0], "현재 이후의 시점을 선택해주세요.")

AssertionError: '현' != '현재 이후의 시점을 선택해주세요.'

- 현

+ 현재 이후의 시점을 선택해주세요.