<문제 상황>
# --------------------------------------전시회 상세페이지 테스트----------------------------------
class ExhibitionDetailViewTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.user_data = {
"email": "test@test.com",
"nickname": "test",
"password": "123",
}
cls.user = User.objects.create_superuser("admin@admin.com", "admin", "123")
cls.exhibitions = []
for i in range(1, 6):
cls.exhibition_data = {
"info_name": f"test Title{i}",
"content": f"test content{i}",
"location": f"location{i}",
"svstatus": "예약마감",
}
cls.exhibitions.append(
Exhibition.objects.create(**cls.exhibition_data, user=cls.user)
)
def setUp(self):
admin_data = {"email": "admin@admin.com", "password": "123"}
response = self.client.post(reverse("users:user-signin"), admin_data)
self.access_token = response.data["access"]
self.is_admin = self.user.is_staff
# ------------------------------------전시회 상세페이지를 불러옴--------------------------------
def test_exhibition_detail(self):
response = self.client.get(
path=reverse("exhibitions:exhibition-detail", kwargs={"exhibition_id": 1}),
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
- 33번줄에 맞게 잘 한 것 같지만 자꾸 35번줄에서 200이 아닌 404가 뜬다
- setUpTestData 함수에서 만든 데이터들을 다 print 해봤는데 데이터가 잘 있고, id도 맞게 있다
print(Exhibition.objects.all().values_list('id', flat=True))
# 출력화면
# <QuerySet [1, 2, 3, 4, 5]>
- 이 코드는 해당 모델의 객체들의 id 리스트를 뽑는 코드인데 이걸 찍었을 때 숫자가 맞게 잘 나왔다
- 33번줄이 뭔가 잘못된 것 같은데 비슷한 코드가 들어가는 다른 테스트함수는 잘 통과가 된다
<해결 방안>
requests 모듈 사용하기!
# exhibitions/tests.py
import requests
baseurl = "http://127.0.0.1:8000/api"
...
# ------------------------------------전시회 상세페이지를 불러옴--------------------------------
def test_exhibition_detail(self):
response = requests.get(f"{baseurl}/exhibitions/5")
self.assertEqual(response.status_code, status.HTTP_200_OK)
- requests를 import 해준다
- 10번줄에 직접 http://127.0.0.1:8000/api/exhibitions/5 라고 쓰는 것은 하드코딩이므로 맨 위에 baseurl이라는 변수에 기본 url을 담았다
- 이렇게 하니 드디어 상태코드 200이 떴다..!!!
- 근데 requests로 하니 데이터를 어떻게 가져와야 할지 몰라서 그냥 상태코드만 비교했다..
- 더 찾아보고 싶지만 다른 일들이 밀려있어서 테스트코드는 여기까지만 하기로...
- 장장 2시간을 고민한 것 같다...ㅠㅠ