카테고리 없음
2023-05-25 테스트코드 게시글(로그인)
jung1911
2023. 5. 25. 21:00
테스트 코드 로그인
먼저 게시글을 사용하기 위해 유저의 id 즉 로그인이 필요하다.
장고에서 테스트를 위해 사용하는 모듈이 있다.
from rest_framework.test import APITestCase, APIClient
from django.urls import reverse
from rest_framework import status
from .models import Article,Comment(게시글 관련)
from PIL import Image(게시글 이미지)
from user.models import User(필수)
from django.test.client import MULTIPART_CONTENT, encode_multipart, BOUNDARY
import tempfile(임시이미지파일)
article/models.py(테스트 코드 함수)
def get_absolute_url(self):
return reverse("articles:article_detail_view", kwargs={"article_id": self.pk})
유저생성하기
- class 사용할 시 cls를 사용해서 유저를 생성
- 유저에 필수값에 해당하는 부분을 확인하고 작성
- user_data 경우 필수값으로 설정되었기 때문에 필수값을 작성
- article_data 제목과 내용을 쓰기 때문에(models.py필수값 확인) 제목과 내용만 사용
- access 이제 이부분 같은경우에 토큰을 받아오기 유저 생성 하는부분을 길게 설정해서 받아왔다. 좀 더 좋은 방법이 있을 있을 수 도 있어 나중에 수정할려고 한다.
class CustomTokenObtainPairViewTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.client = APIClient()
cls.email = 'test123@naver.com'
cls.account = 'admin'
cls.nickname = 'admin'
cls.password = 'G1843514dadg23!4'
cls.user_data = {'account':'admin','email':'test123@naver.com','password':'G1843514dadg23!4'}
cls.user = User.objects.create_user(account=cls.account, email=cls.email, nickname=cls.nickname, password=cls.password)
cls.article_data = {"title": "test title", "content": "test content"}
cls.article = Article.objects.create(**cls.article_data, user=cls.user)
cls.user.is_active = True # 인증 상태를 True로 설정
cls.user.save()
def setUp(self):
self.access_token = self.client.post(reverse('user:login_view'), self.user_data).data['access']
로그인 테스트 코드
- 게시글을 작성할려면 유저의 id가 필요하다.
- 테스트 코드를 사용해서 로그인 된 상태로 권한이있는 기능들을 테스트 할 수 있다.
아직 겉으로 왜쓰는지 알지만 속내용은 왜 사용하는지에 대해 잘 모른다. 시간이 나면 좀 더 공부 할 예정
def test_login(self):
url = reverse("user:login_view")
data = {
'account': self.account,
'password': self.password
}
response = self.client.post(url, data)
# print(response.data)
self.assertEqual(response.status_code, status.HTTP_200_OK) # 로그인 요청이 성공적으로 처리되었는지 확인
로그인 안 한 상태
로그인 안되어 있는 상태이면 401 상태코드가 뜨도록 했다.
def test_fail_if_not_logged_in(self):
url = reverse("articles:article_view")
response = self.client.post(url, self.article_data)
print(response.data)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)