해당 함수는 게시글 작성에 관한 코드.
view, service, Service TestCase 부분에서는 정상 작동되었으나 API TestCase를 작성 중에 발생
response 부분에서 data를 받지 못함.
def test_post_view_def_post_ok(self):
client = APIClient()
user = User.objects.get(username = 'test_user')
create_data = {
'title' : 'test_title3',
'content' : 'test_content3',
'tags' : '#sns',
'is_active' : True,
'views' : 60,
'created_date' : '2022-10-16 08:00:00.000000'
}
client.force_authenticate(user = user)
url = '/posts/'
response = client.post(url, data=create_data)
result = response.json()
self.assertEqual(response.status_code, 201)
🔽 찾아보니 직접 mutable을 설정해보라고 하길래 해보니 안됨 🔽
Newer Django has a immutable QueryDict, so this error will always happen if you are getting your data from querystring or a multipart form body. The test client uses multipart by default, which results in this issue.
Last Resort: If you need to post multipart, and also modify the query dict (very rare, think posting image + form fields) you can manually set the _mutable flag on the QueryDict to allow changing it. This is
setattr(request.data, '_mutable', True)
🔽 결과 : 실패 🔽
AttributeError: 'dict' object has no attribute '_mutable'
🔽 위의 방법이 되질 않아 검색어에 'dict'을 추가해 찾아보아봄 🔽
For those who are getting a Querydict type on their requests, when sending the payload from the TestCases, but a Dict when passing data from a frontend (eg. React) - You can avoid dealing with a Querydict by just passing the payload as JSON, and as a result, your request.data will be of type 'dict'.
payload = {
"name": "Dict example"
}
response = self.client.post(ENDPOINT, json.dumps(chat_payload),content_type="application/json")
This way, you can access the request.data["name"] as a normal dict and makes the operations easier.
🔽 적용 코드가 정상 작동 ! 🔽
<Response status_code=201, "application/json">
response = client.post(
url,
json.dumps({
'title': 'test_title3',
'content': 'test_content3',
'tags': '#sns',
'is_active': True,
'views': 60,
'created_date': '2022-10-16 08:00:00.000000'
}),
content_type="application/json"
)
🔽 좀 더 깔끔하게 정리하기 위해 중복되는 부분에 변수를 넣어도 정상 작동 ! 🔽
<Response status_code=201, "application/json">
response = client.post(
url,
json.dumps(create_data),
content_type="application/json"
)
서비스 로직을 분리하고 서비스 테스트 코드를 어느정도 작성이 끝나 API부분 테스트 코드 작성 중인데,, 어렵다
어렵고 나의 코드 보충할것도 리팩토링할 것도 엄청 많은 것 같다. 갈길이 멀다 멀어~
'PROJECTS' 카테고리의 다른 글
pytest 에러 (0) | 2022.12.07 |
---|---|
Django | RESTful API는 뒤에 slash가 없어야하는데 WARNING 발생 (0) | 2022.11.10 |
쿼리수 줄이기 (0) | 2022.10.13 |
쿼리수 확인 (0) | 2022.10.12 |
set_password | make_password | check_password (0) | 2022.09.08 |