# 이미지 없는 게시글 작성(15강)
def test_create_article(self):
response = self.client.post(
path=reverse("article_view"),
data=self.article_data,
HTTP_AUTHORIZATION=f"Bearer {self.access_token}" # setUp에서 받아온 access_token을 넣어주었음.
)
self.assertEqual(response.status_code, 200)
print(self.user, self.user_data)
# 이미지 있는 게시글 작성(16강)
def test_create_article_with_image(self):
# 임시 이미지 파일 생성
temp_file = tempfile.NamedTemporaryFile()
temp_file.name = "image.png"
image_file = get_temporary_image(temp_file)
image_file.seek(0)
self.article_data["image"] = image_file
#전송
response = self.client.post(
path=reverse("article_view"),
data=encode_multipart(data= self.article_data, boundary=BOUNDARY),
content_type=MULTIPART_CONTENT,
HTTP_AUTHORIZATION=f"Bearer {self.access_token}"
)
self.assertEqual(response.status_code, 200)
print({self.access_token})
자꾸 다음과 같은 에러가 나와서 1~2시간가량 방황..
Traceback (most recent call last): File "/Users/ksw4060/Desktop/Coding/django/DRF_Project002/article/tests.py", line 76, in test_create_article_with_image self.assertEqual(response.status_code, 200) AssertionError: 400 != 200
Ran 3 tests in 0.369s
FAILED (failures=2) Destroying test database for alias 'default'...
게시글을 이미지파일 없이 생성해도, 이미지 파일 넣어서 생성해도 400에러가 발생.
권한인증(401) 코드가 아닌걸로 보아, request 문제임.
# views.py
class ArticleView(APIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def get(self, request):
articles = Article.objects.all().order_by("-created_at")
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request):
if not request.user.is_authenticated:
return Response({"message":"로그인 해주세요"}, status=status.HTTP_401_UNAUTHORIZED)
serializer = ***ArticleCreateSerializer***(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# serializers.py
class ArticleCreateSerializer(serializers.ModelSerializer):
uploaded_image = serializers.ImageField()
class Meta:
model = Article
fields = ["id", "title", "content", "uploaded_image"]
extra_kwargs={
"title": {
"error_messages": {
"blank": "제목을 입력해주세요",
}
},
"content": {
"error_messages": {
"blank": "게시글 내용을 입력해주세요",
},
},
"uploaded_image": {
"error_messages": {
"blank": "사진을 입력해주세요",
},
},
}
serializers.py 에서 게시글을 post 할때 uploaded_image 필드를 필수적으로 받는 것을 확인.
uploaded_image를 삭제하고 다시 실행.
# serializers.py 다음과 같이, uploaded_image 삭제
class ArticleCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ["id", "title", "content"]
extra_kwargs={
"title": {
"error_messages": {
"blank": "제목을 입력해주세요",
}
},
"content": {
"error_messages": {
"blank": "게시글 내용을 입력해주세요",
},
},
}
python3 manage.py test article 터미널에 입력하니 테스트 정상 통과
(venv) ksw4060@gimseong-uui-MacBookPro DRF_Project002 % python3 manage.py test article
Found 3 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
testuser {'email': '[email protected]', 'account': 'tester', 'username': 'testuser', 'password': 'popk1214'}
...
----------------------------------------------------------------------
Ran 3 tests in 0.365s
OK