Back-end/Django

APITestCase와 APIClient를 활용한 Django Rest Framework 단위 테스트 코드 작성

sw_develop 2022. 2. 5. 23:44

사이드 프로젝트의 단위 테스트를 작성하며 알게된 내용을 정리하였다.

 

#️⃣ APIClient를 사용해 Request 생성 시 header 추가하기

response = self.client.post(
            path=url,
            HTTP_{Header 이름}={값})

위와 같이 인자로 맨 앞에 HTTP_  붙여 전달해주면 된다. 

참고) Stack Overflow - API Client Custom Header

 

#️⃣ reverse() 사용 시 url path 변수 값 설정하기

# 아래 2개는 동일한 표현임
url = "/account/<int:pk>/userInfo"

url = reverse(viewname="{django app 이름}:{urlpatterns 등록 시 설정한 name}", args=[self.user_id])

위와 같이 reverse()의 args 인자로 path 변수 값을 설정할 수 있다.

이때 args에는 여러 값을 전달할 수 있도록 iterable 해야 하므로, []로 감싸 list 타입으로 전달해야 한다.

참고) Stack Overflow - must be an iterable, not int

 

#️⃣ APIClient에 Token Authentication 설정하기

self.client.credentials(HTTP_AUTHORIZATION="Bearer " + self.access_token)

APITestCase를 상속한 클래스 내부의 메서드에서 self.client는 APIClient 객체이다.

위와 같이 credentials() 메서드를 사용해 Bearer Token을 설정하여 토큰 인증을 할 수 있다.