pop()
, popitem()
pop(key, default)
popitem()
: 딕셔너리에서 마지막으로 추가된 키-값 쌍(아이템)을 삭제하고, 삭제한 키-값 쌍을 튜플 형태(key, value)
로 반환하는 메서드 class UserSerializer(serializers.ModelSerializer):
# rest api에서 question이 아이디(pk)로만 표출
questions = serializers.PrimaryKeyRelatedField(many=True, queryset = Question.objects.all())
# rest api에서 Question 모델에서 정의한 __str__ 형태로 나옴
questions = serializers.StringRelatedField(many=True, read_only=True)
# rest api에서 원하는 field를 보여줌.
questions = serializers.SlugRelatedField(many=True, read_only=True, slug_field='question_text')
# rest api에서 연결된 url을 보여줌
questions = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='question-detail')
class Meta:
model = User
fields = ['id', 'username', 'questions']
test_
로 시작하는 이름을 가져야 한다.$ python manage.py test
를 실행하면 모든 tests.py 파일을 실행한다.$ python manage.py test polls_api.tests.QuestionListTest
=> python manage.py test 앱.tests.클래스이름
setUp
from rest_framework.test import APITestCase
을 이용해서 API test 한다. ## polls_api/tests.py
from django.test import TestCase
from polls_api.serializers import QuestionSerializer
# test 로 시작하는 method만 test해줌
# test가 제대로 작동하면 method마다 점(.)을 하나씩 찍어줌
# test를 실패하면 method마다 F를 하나씩 찍어줌 + 에러난 이유에 대해 얘기함
class QuestionSerializerTestCase(TestCase):
def test_with_vali_data(self):
serializer = QuestionSerializer(data={'question_text': 'abc'})
# 2개의 인자가 같으면 True, 다르면 False
self.assertEqual(serializer.is_valid(), True)
new_question = serializer.save()
# 인자가 있으면 True, 비어있으면 False
self.assertIsNotNone(new_question.id)
def test_with_invail_data(self):
serializer = QuestionSerializer(data={'qusetion_text' : ''})
# 2개의 인자가 같으면 True, 다르면 False
self.assertEqual(serializer.is_valid(), False)
coverage
패키지를 설치하여 확인$ pip install coverage
: 패키지 설치$ coverage run manage.py test
: test code 검사$ coverage report
: 결과 확인하기이해했다고 명쾌하게 떨어지지 않는다. 다음주 프로젝트 동안에 이번주에 배운 내용을 응용하기 위해서 다시한번더 꼼꼼하게 복습할 필요가 있다.