AI 웹개발반/Python, Django
[Django] raise serializers.ValidationError 사용 시 assertEqual로 에러 메세지 비교하기
째깍단
2023. 7. 1. 22:11
시간 유효성 체크 함수 개선 및 테스트코드를 맞추어 수정하며 알게된 것.
- 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: '현' != '현재 이후의 시점을 선택해주세요.'
- 현
+ 현재 이후의 시점을 선택해주세요.