from django.test import TestCase
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from user.models import User
# 파이썬 장고 실무 심화 5주차, 10강 - setUp 함수를 모든 클래스에 대해서 늘 새로 만들어 주는건 비효율적이기 때문에, 수정되지 않고 반복해서 써야하는 함수 같은 경우 "클래스 메소드"중 하나인 setUpTestData를 쓰는게 좋음. 11강때 클래스메소드, 12강때 스태틱 메소드에 대해서 배움
class ArticleCreateTest(APITestCase):
""" 주석처리. 12강에서 13강으로 넘어가면서, setUp 함수에서 setUpTestData 클래서 메소드를 사용하기 시작함. 이유는 알지???
def setUp(self):
# user_data 에는 로그인 시, access_token 과 refresh_token 을 받을 수 있음.
# self.user_data).data['access'] 와 같은 방식으로 접근함.
self.user_data = {'email':'[email protected]','account':'tester','username':'testuser','password':'popk1214',}
# user.models.py 에 있는 create_user 함수로 유저를 생성함.
self.user = User.objects.create_user('[email protected]','tester', 'testuser','popk1214')
# title과 content로 게시글 데이터를 생성
self.article_data = {'title':'some title', 'content':'some content'}
# access_token 을 user_data 를 통해서 받아옴.
self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
"""
@classmethod
def setUpTestData(cls):
cls.user_data = {'email':'[email protected]','account':'tester','username':'testuser','password':'popk1214',}
cls.article_data = {'title':'some title', 'content':'some content'}
cls.user = User.objects.create_user('[email protected]','tester', 'testuser','popk1214')
"""
access_token을 만들때 self.client 는 cls.client로 쓰면, 에러가 발생함. cls는 client라는 함수가 없기때문임. 그래서 access_token 는 setUpTestData함수가 아닌, setUp 함수안 작성함
"""
def setUp(self):
self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
def test_fail_if_not_logged_in(self):
url = reverse("article_view")
response = self.client.post(url, self.article_data)
self.assertEqual(response.status_code, 401)
터미널에 python3 manage.py test 를 하면 모든 앱들에 대한 테스트 진행
python3 manage.py test article 를 하면, article 앱에 있는 tests.py 에 대해서만 테스트를 진행한다.
(venv) ksw4060@gimseong-uui-MacBookPro DRF_Project002 % python3 manage.py test
Found 4 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
....
----------------------------------------------------------------------
Ran 4 tests in 0.614s
OK
Destroying test database for alias 'default'...
(venv) ksw4060@gimseong-uui-MacBookPro DRF_Project002 % python3 manage.py test article
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.181s
OK
Destroying test database for alias 'default'...