PROJECTS

body 안넣었을때 에러처리 | 에러메세지 필드값 설정 | flake8 좋다..

nicesugi 2022. 12. 10. 01:15

오늘의 목표로는 회원가입시 request.data의 field 값이 비어있는 것이 아닌 body (= request.data) 자체가 없을 경우의 로직도 작성하고자 했다. service TestCase에서는 TypeError가 나왔고, view에 그에 따른 에러핸들링을 했으나 실행해보니

에러메세지가 TypeError의 메세지가 아닌 ValidationError가 나왔다.

view가 아닌 service 로직에 적용을 하거나 raise를 사용해 예외처리를 해봤지만 결과가 같았다. body값이 없을 경우에는 request.data 가 빈값으로 밖에 나오질 않으니 if문을 사용해 response를 작성해주고, TypeError에 대한 에러핸들링 코드가 불필요해져서 삭제해주었다. TestCase 작성시에는 인자값을 안받으니 TypeError가 떠 당연히 body가 없으면 data자체가 나오질않겠거니 했더니 착각이었고 편견이었다. 

 

이 과정 중에 값이 빈값이라고 필드 수만큼 메세지가 뜨길래

특정문구("blank일 수 없습니다")를 if문 처리해주어 각 필드가 무엇인지도 명시해주었다.

"이 필드는blank일 수 없습니다" ->"username는 blank일 수 없습니다"

아주 만족스럽지만 두개의 필드가 빈 값일 경우 "username는 blank일 수 없습니다. \nemail는 blank일 수 없습니다" 라고 나오는데 뭐.. 이 정도는 프론트엔드에서 처리할 수 있으니 괜찮을 듯 ?.. 하다...? 괜찮겠지? 

 

flake8 을 이용하면 내가 사용하지 않는 코드들도 나온다.

이를 통해 TestCase의 setUp에 만들어둔 user 데이터를 읽지 못한다는 것을 발견했다. 

기껏 setUp 데이터를 작성해두고,, 새로 만드는 데이터가 이미 만들어진 데이터인지 확인하고자 쿼리를 작성했었다니,,,,,,,

이래서 성공했던 것도 의심해야하고 봤던 것도 또 봐야하나보다.

# 수정 전
class TestUserServices(TestCase):
    @classmethod
    def setUpTestData(cls):
        user = User.objects.create(
            username="test_user", email="test_email@example.com", password="test_pw"
        )
        
def test_fail_sign_up_same_username(self):
    existed_user = User.objects.get(username="test_user")
    create_data = {
        "username": "test_user",
        "email": "user1@example.com",
        "password": "user1password",
    }
    if create_data["username"] == existed_user.username:
        with self.assertRaises(exceptions.ValidationError):
            sign_up(create_data)


# 수정 후
class TestUserServices(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user = User.objects.create(
            username="test_user", email="test_email@example.com", password="test_pw"
        )
        
def test_fail_sign_up_same_username(self):
    create_data = {
        "username": "test_user",
        "email": "user1@example.com",
        "password": "user1password",
    }
    with self.assertRaises(exceptions.ValidationError):
        sign_up(create_data)
반응형

'PROJECTS' 카테고리의 다른 글

pytest 에러  (0) 2022.12.07
Django | RESTful API는 뒤에 slash가 없어야하는데 WARNING 발생  (0) 2022.11.10
AttributeError: This QueryDict instance is immutable  (0) 2022.10.20
쿼리수 줄이기  (0) 2022.10.13
쿼리수 확인  (0) 2022.10.12