본문 바로가기

내일 배움 캠프/TIL

TIL) 8주차 4일

test에 대해서 공부중인데

 

아직까지 이걸 꼭 해야하나 싶다..

 

오늘도 화이팅!


self.assertEqual() 

  • 괄호 안에 두 값을 비교하는 함수
    • 예시1) self.assertEqual(2,3) - 2와 3을 비교하는데 다르니까 'FAILED'가 나온다.
    • 예시2) self.assertEqual(response.status_code, 200) - response의 status코드를 비교하는 것으로 200이 나오면 'OK'가 나오고 아니면 FAILED가 나온다.

 


from django.urls import reverse

  • reverse 는 urls.py의 urlpatterns 안에 있는 name값들을 이용해서 해당 path를 가져올 수 있다.
    • 예시1) url = reverse("user_view") - users.py의 name의 값이 user_view인 것을 url 변수에 넣는다 라는 뜻
    • 예시2) response = self.client.post(reverse(token_obtain_pair), self.data) - name의 값(token_obtain_pair)과 self.data의 값을 client를 이용해서 post을 보내 그 값을 response에 담는다는 뜻

 


setUp 메소드

  • test를 진행 할 때는 원래 모든 test는 서로 독립적이여야 하지만 setUp 메소드를 이용하면 이 메소드 이후에 작성한 모든 test메소드를 시작하기전에 먼저 불러와진다.
    • 예시)
def setUp(self):
        self.data = {'email': 'john@naver.com', 'password' : 'johnpassword'}
        self.user = User.objects.create_user('john@naver.com', 'johnpassword')

이 메소드 뒤에 적은 test 메소드들은 setUp메소드 안의 변수들을 활용할 수 있다!

 


client 활용시 주의점

self.client.post 나 self.client.get 등 이용할 때 reverse를 이용해 path값을 불러오는데 이때 해당 함수( 예를 들어, name = 'user_view'를 불러올때 이용하는 함수 - UserView ) 안에 post면 post가, get이면 get 메소드가 정의 되어 있어야 한다

 

  • 예시
# users/views.py

class UserView(APIView):
    
    def post(self, request):
        serializer = UserSerializer(data = request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({"message":"가입완료"}, status=status.HTTP_200_OK)
        else:
            return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
 
 
#users/tests.py

class LoginUserTest(APITestCase):
    def setUp(self):
        self.data = {'email': 'john@naver.com', 'password' : 'johnpassword'}
        self.user = User.objects.create_user('john@naver.com', 'johnpassword')
        
    def test_get_user_data(self):
        access_token = self.client.post(reverse('token_obtain_pair'), self.data).data['access']
        response = self.client.get(
            path=reverse("user_view"),
            HTTP_AUTHORIZATION=f"Bearer {access_token}"
        )
        # self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['email'], self.data['email'])

이를 실행하게 되면,

response.data['email']의 값이 없다고 나온다. 즉 get으로 받아와야 하는데 get 메소드가 없어서 오류가 난것이다.

 

 

+ get메소드 추가 후 실행하면 정상적으로 작동하게 된다.

class UserView(APIView):
    def get(self, request):
        return Response(UserSerializer(request.user).data, status=status.HTTP_200_OK)

 


 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 9주차 2일  (0) 2023.05.10
TIL) 9주차 1일  (0) 2023.05.09
TIL) 8주차 3일  (0) 2023.05.04
TIL) 8주차 1일  (0) 2023.05.02
TIL) 7주차 5일  (0) 2023.05.02