[이케아 프로젝트] unit test 대발견!

hyuckhoon.ko·2020년 7월 13일
1

What I learned in wecode

목록 보기
88/109

오늘은 5시간의 코딩삽질(?)을 통해 얻은
귀중한 정보를 공유하려 한다ㅋㅋㅋㅋ

너무너무 공유하고 싶은 내용이다.
그래서 위코드 9기 슬랙 방에도 공유했다.



1. 상황

1) 이케아 '검색' 엔드포인트 구현 완료된 상태

2) 프론트엔드에서 HTTP body를 통해 유저의 검색어 전달

3) 유닛테스트 get 메소드 사용시, body에 데이터 전달 불가능한 상황

  • 불가능했던 이유 : 장고 공식문서에 따르면,
    쿼리스트링으로 전달하는 방법만 나와있다.

  • 그 외, 수많은 구글링 및 블로그를 찾아 적용해 봐도
    views.py의 json.loads(request.body) 에 값이 들어오지 않음.


4) 해결방법 : 우연히 스쳐 지나갈법한 스택오버플로우의

댓글까지 하나하나 천천히 읽어보기 시작했고....!

https://stackoverflow.com/questions/8583290/sending-json-using-the-django-test-client

한 댓글에서, 위의 방법으로 사용시 'GET'메소드에서도 잘 작동된다는
문구를 읽고 바로 적용했다.

교훈 : 스택오버플로우의 댓글 하나하나 전부 읽자!

개발자들의 댓글에도 그들의 고뇌가 담겨있는 문서들이다.



2. 코드

    def test_search_get_success(self):
        data = {'user_input':'desk'}
        response = self.client.generic(
            'GET',
            '/product/search',
            json.dumps(data)
        )
        self.assertEqual(response.json(),
            {
                 "search_result": [
                    {
                         "search_number": 0
                    }
                 ]
             }
         )

결과



3. 배운 점

1. 처음에 언급했듯이, 스택오버플로우의 댓글까지 하나하나 꼼꼼히 읽기

2. 그래도 장고 공식 문서는 1순위 레퍼런스다.

3. 어렵게 얻은 정보일수록 주변에 공유를 해야 한다.

1개의 댓글

comment-user-thumbnail
2020년 7월 18일

오.. get test에서 body 넘기는 방법 저도 처음 알았어요 대박쓰 👍

답글 달기