Django 기본 view 테스트
Django 를 개발하면서 제일 기본적인 view 를 생성하고 기본 결과를 테스트 한다.
TestCase 에서 제공하는 client 라는 객체를 이용해서 get, post 같은 method를 테스트 할 수 있는데,
여기서는 우선 get을 테스트할 예정이다.
먼저 views 파일에서 AuthorListView 클래스를 생성합니다.
from django.http import JsonResponse
from django.shortcuts import render
from django.views import generic
from catalog.models import Author
class AuthorListView(generic.ListView):
model = Author
paginate_by = 10
def get(self, request):
# 뷰 로직 작성
author_list = list(Author.objects.filter().values())
return JsonResponse(author_list, safe=False)
해당 클래스를 urls 에서 'catalog_list' 경로로 매칭시켜 줍니다.
그리고, test_views.py 를 만들어서 AuthorListViewTest 를 생성합니다.
여기서는 setUpTestData() 함수에서 객체를 13개 추가 합니다.
그리고, 해당 추가해 준 갯수가 해당 함수를 호출한 결과와 일치하는지 테스트 합니다.
import json
from django.test import TestCase
from catalog.models import Author
class AuthorListViewTest(TestCase):
@classmethod
def setUpTestData(cls):
# Create 13 authors for pagination tests
number_of_authors = 13
for author_id in range(number_of_authors):
Author.objects.create(
first_name=f'Christian {author_id}',
last_name=f'Surname {author_id}',
)
def test_view_url_exists_at_desired_location(self):
response = self.client.get('/catalog/catalog_list/')
# print(response)
json_content = json.loads(response.content)
self.assertEqual(response.status_code, 200)
self.assertEqual(14, len(json_content))
def test_view_url_accessible_by_name(self):
response = self.client.get(reverse('catalog_list'))
self.assertEqual(response.status_code, 200)
여기서 self.assertEqual(14, len(json_content)) 이 부분을 보게 되면
추가해준 개수는 13인데, 14와 비교하는 것은
개인 DB에 기본적인 데이터 1 를 추가했기 때문에
13이 아닌 14와 체크를 하고 있다.
self.assertEqual(response.status_code, 200)
response.status_code 가 성공인 경우 200 값을 리턴하므로,
정상적인 성공 결과를 체크한다.
마지막 reverse('catalog_list') 를 통해서 가져온 url로
response.status_code 가 성공인지 같이 체크한다.
python manage.py test --settings='django_testing.settings_test' --verbosity 3
로 테스트 해보게 되면 다음과 같은 결과를 확인할 수 있다.