seminar-2020
seminar-2020 copied to clipboard
test accepted default value지정 하지 않거나 false시 오류
이번 테스트에서는 user을 만들고 이것저것 하게 되는데,
이번 test 에서 assert 하는 코드는
accepted field가 없어도 true 를 default 로 설정하도록 되어 있습니다.
저같은 경우는 accepted filed를 booleanfield로 설정해놓고 default validation을 이용해서
postman에서 주지 않으면 false를 주게 해놓았는데,
이처럼 해놓은 경우에는 accepted가 #218 에 언급되어있는것처럼 HTML로 들어온게 아니라
required에 걸려서 FFFEEE를 뱉게 되네요.
혹시 accepted코드를 booleanField로 하신 분 있으면 참고 바랍니다.
accepted 항목을 추가하였을때 테스트가 정상적으로 동작하는 것을 확인했습니다. +accepted를 false로 넣었을 때, assertTrue에서 걸리는 것을 확인하였습니다.
@davin111 #183 에 답변을 하셨을 때, 저는 기본적인 booleanfield를 이용해도 문제 없다..정도로 알아들었었는데 이번 테스트에서 accepted필드가 의도된 것인지 질문드립니다!
일단 제목이 많이 추상적인 것 같습니다 ㅜ 질문하시려는 요지가 제목에 잘 드러나게 수정해주세요. FFFEEE 자체는, 3개는 실패했고 3개는 에러가 났다는 것뿐이니까요! 그리고 '아마 assertTrue에서 걸리지 싶습니다.'보다는 정확하게 확인해보시고 질문해주시는 게 좋을 것 같습니다.
일단 제목이 많이 추상적인 것 같습니다 ㅜ 질문하시려는 요지가 제목에 잘 드러나게 수정해주세요. FFFEEE 자체는, 3개는 실패했고 3개는 에러가 났다는 것뿐이니까요! 그리고 '아마 assertTrue에서 걸리지 싶습니다.'보다는 정확하게 확인해보시고 질문해주시는 게 좋을 것 같습니다.
넵 수정하도록 하겠습니다 ㅠ 제 예상에 BooleanField로 하신 분들이 꽤 계실 것 같아 동일한 에러를 받을것 같았습니다. assertTrue부분은 제가 default값이 없어 직접 넣어 확인하였습니다.
몇 가지 내용이 섞여있다는 느낌도 드는데, 일단 https://github.com/wafflestudio/rookies/issues/183#issuecomment-697283403 은 말 그대로 'true', 'True', 'TRUE'면 True로, 'false', 'False', 'FALSE'면 False로 받아들이는 정도면 된다는 이야기였습니다.
그런데 serializers.BooleanField
를 사용해도 required=False
로 하는 등의 방식을 이용할 수도 있다고 생각해서 BooleanField
를 이용하냐 마냐 자체가 본질이라고 생각하진 않습니다. 아마 문제는 과제 2 당시 accepted
가 optional이고 accepted
가 들어오지 않았을 때 True
로 취급한다, 같은 내용이 명시적이지 않았던 것 정도 아닐까요?
그래서 accepted가 무조건 있어야 하는 것으로 전제하고 아니면 400
이라고 개발하셨는데, tests_user.py
는 accepted를 optional하게 받아들이고 그 경우 True로 저장하고 있어서 이에 대해 질문하고 싶으시다는 것이구요.
몇 가지 내용이 섞여있다는 느낌도 드는데, 일단 https://github.com/wafflestudio/rookies/issues/183#issuecomment-697283403 은 말 그대로 'true', 'True', 'TRUE'면 True로, 'false', 'False', 'FALSE'면 False로 받아들이는 정도면 된다는 이야기였습니다.
그런데
serializers.BooleanField
를 사용해도required=False
로 하는 등의 방식을 이용할 수도 있다고 생각해서BooleanField
를 이용하냐 마냐 자체가 본질이라고 생각하진 않습니다. 아마 문제는 과제 2 당시accepted
가 optional이고accepted
가 들어오지 않았을 때True
로 취급한다, 같은 내용이 명시적이지 않았던 것 정도 아닐까요?그래서 accepted가 무조건 있어야 하는 것으로 전제하고 아니면
400
이라고 개발하셨는데,tests_user.py
는 accepted를 optional하게 받아들이고 그 경우 True로 저장하고 있어서 이에 대해 질문하고 싶으시다는 것이구요.
넵 그렇습니다. 앞 부분은 BooleanField()를 사용했을 때의 문제가 발생한 상황이고,
optional하게 주냐 아니냐가 명세적으로 갈릴수 있는 부분인데,
#183 에서 제가 해석했던 명세와 달라 질문드리게 되었습니다. 질문이 다소 명확하지 않았던 것 같네요 죄송합니다 ㅠ
@eldpswp99 https://github.com/wafflestudio/rookies/issues/218#issuecomment-701530724 에서 비슷한 내용의 답변을 했습니다. 이 이슈에도 직접적으로 관련되므로 그대로 옮기도록 하겠습니다.
과제 2 당시 이 부분의 명세가 불명료한 지점이 있었던 것 같은데, 일단 의도는
POST /api/v1/user/
및POST /api/v1/user/participant/
request의 body에서accepted
는 optional하고, 없는 경우True
라는 것이었습니다. accepted는 optional하고 default로 한 쪽의 값을 갖는 것이 일반적인 서비스의 동작을 고려했을 때 좀 더 자연스러운 구현이라고 생각되고, 반대로accepted
가 없을 때400
이어야 한다는 명세도 없었긴 했습니다.어쨌든 과제 2의 이 부분에 대해서는 어느 쪽으로 구현하셨어도 자연스러운 것으로 받아들이도록 하겠습니다. 다만 과제 3을 진행할 때는, #221 과 관련해 optional한 것으로 취급하고, default 값을 True인 것으로 수정해주세요.
저도 accepted가 input으로 주어지지 않았을 때의 default가 api 스펙 상 명시되지 않아서 False로 두었는데, test를 통해 True여야 함을 알 수 있었습니다!
스펙을 국어로 제시하다 보면 모호함이 있을 수 있는데, 이렇게 test가 있으니 명확하게 작성자의 의도를 알 수 있어 좋은 것 같습니다.
@eldpswp99 #218 (comment) 에서 비슷한 내용의 답변을 했습니다. 이 이슈에도 직접적으로 관련되므로 그대로 옮기도록 하겠습니다.
과제 2 당시 이 부분의 명세가 불명료한 지점이 있었던 것 같은데, 일단 의도는
POST /api/v1/user/
및POST /api/v1/user/participant/
request의 body에서accepted
는 optional하고, 없는 경우True
라는 것이었습니다. accepted는 optional하고 default로 한 쪽의 값을 갖는 것이 일반적인 서비스의 동작을 고려했을 때 좀 더 자연스러운 구현이라고 생각되고, 반대로accepted
가 없을 때400
이어야 한다는 명세도 없었긴 했습니다. 어쨌든 과제 2의 이 부분에 대해서는 어느 쪽으로 구현하셨어도 자연스러운 것으로 받아들이도록 하겠습니다. 다만 과제 3을 진행할 때는, #221 과 관련해 optional한 것으로 취급하고, default 값을 True인 것으로 수정해주세요.
넵 수정하도록 하겠습니다 답변 감사드립니다!
넵 이 자체가 벌써 test의 중요성을 서로 깨달아가는 과정인 것 같습니다. 이 문제에 대해서는 과제 2 자체를 어떤 방식으로 구현했다고 해서 잘하고 못하고가 전혀 없으니, test를 통해 서로 스펙을 명료히 해서 조율해가는 과정이다, 정도로 받아들여주시면 좋을 것 같습니다!
@eldpswp99 @gyusang 관련 내용 과제 2, 과제 3에도 추가했습니다! 감사합니다. https://github.com/wafflestudio/rookies/commit/f2d66399890043cdfbfaedc5a5c2513a958761ae