# 이미지 없는 게시글 작성(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 문제임.

  1. 내가 코드를 잘못 입력 했거나
  2. views.py 나 serializers.py에서 잘못되었을 가능성이 높음
# 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