Troubleshooting

DRF production에서 정상작동 하는데 test 통과 안되는 문제

2023. 9. 21. 11:58
728x90

문제 상황: DRF에서 nested 구조가 포함된 요소에 대해 POST 를 했을때 실 서비스에서는 정상적으로 생성되나, test에서는 nested 정보들이 반영이 안되는 오류

 

앞선 오류와 비슷한 느낌일거라는 생각이 들어 우선 validated_data등을 체크해보았다.

 

우선 테스트에서 serializer단의 validated_data와 view단의 request.data를 확인했다.

# Test request.data
<QueryDict:{
    "title": ["Post Restaurant Listing Test"],
    "is_private": ["True"],
    "restaurant_list": ["{'restaurant': {'uuid': UUID('d915e440-238c-45d7-bc95-5e1cc89c13af')}, 'order': 1}"],
}>

# Test validated_data
{"title": "Post Restaurant Listing Test", "is_private": True}

그리고 실제 production의 validated_data, request.data를 확인했다.

# Production request.data
{
    "title": "Post Restaurant Listing Test",
    "is_private": True,
    "restaurant_list": [{"restaurant": {"uuid": "d1f1b6a5-5aaa-4a1e-9cb4-1236dd36bd82"}, "order": 1}],
}

# Production validated_data
{
    "title": "Post Restaurant Listing Test",
    "is_private": True,
    "restaurant_list": [
        OrderedDict([("restaurant", OrderedDict([("uuid", UUID("d1f1b6a5-5aaa-4a1e-9cb4-1236dd36bd82"))])), ("order", 1)])
    ],
}

 

확인하면 test에서 보낸값으로는 제대로 validated 처리가 되지 않았다. 그 이유는 production에서는 제대로 json이 디코딩되었는데, test에서는 restaurant_list 내부의 값은 json decoding이 되지 않은걸로 보인다. 또한 다른값들도 리스트 안에 들어있는등 문제가 있어 보인다.

 

해결 방법:

# 기존
restaurant_listing_data = {
    "title": "Post Restaurant Listing Test",
    "is_private": True,
    "restaurant_list": [
        {
            "restaurant": {
                "uuid": self.restaurant.uuid,
            },
            "order": 1,
        }
    ],
}
response = self.client.post(reverse("restaurant_listing_list"), data=restaurant_listing_data)

# 수정
restaurant_listing_data = {
    "title": "Post Restaurant Listing Test",
    "is_private": True,
    "restaurant_list": [
        {
            "restaurant": {
                "uuid": self.restaurant.uuid,
            },
            "order": 1,
        }
    ],
}
restaurant_listing_data_json = json.dumps(restaurant_listing_data)
response = self.client.post(
    reverse("restaurant_listing_list"), data=restaurant_listing_data_json, content_type="application/json"
)

수동으로 json dumps를 해주고, application/json type으로 전송해주었다.

728x90

'Troubleshooting' 카테고리의 다른 글

카카오 소셜 로그인시 카카오톡 내부에서 브라우저가 켜지는 오류  (0) 2024.02.09
poetry 오류 ImportError: cannot import name 'user_data_dir' from 'platformdirs' (unknown location)  (0) 2024.02.09
장고 https적용시 CSRF에러  (0) 2023.09.04
230818 Gunicorn [CRITICAL] WORKER TIMEOUT 오류  (0) 2023.08.18
Django, Docker-compose 에서 .env 적용 안되는 문제  (0) 2023.06.14
Wibaek
생쥐 개발자
Wibaek
총 방문
오늘
어제
  • 전체보기 (110)
    • 서버(Server) (4)
      • 장고 (Django) (20)
      • 스프링 (Spring) (0)
    • 프론트엔드 (Frontend) (4)
    • 파이썬 (Python) (8)
    • 자바 (Java) (1)
    • 인프라 (Infra) (10)
    • 알고리즘 (Algorithm), PS (4)
      • Leetcode (0)
      • Baekjoon Online Judge (3)
    • CS (20)
      • 자료구조 (Data Structure) (19)
    • Troubleshooting (10)
    • 회고 & 기록 (10)
    • 기타 (Other) (12)
    • TIL (1)
    • 하나도 안 중요함 (6)

인기 글

250x250
hELLO · Designed By 정상우.
Wibaek
DRF production에서 정상작동 하는데 test 통과 안되는 문제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.