221115 TIL 인수테스트 하면서 만난 문제

오늘은 어제 작성한 사용자 스토리를 바탕으로 인수 테스트를 다시 작성하고 코드로 옮겨서 인수 테스트를 통해 지금까지 구현한 기능을 검증하기 시작했다.
우선 로그인 기능이 구현되지 않았기 때문에 로그인이 안되었을 때의 시나리오를 제외하고는 모두 테스트하는 와중에 막히는 테스트가 있었는데 게시글 작성할 때 게시글 제목이나 내용을 입력하지 않았을 때 나오는 팝업창의 문구가 제대로 나오는지 테스트하는 부분이었다.

제목은 입력하지 않고 카테고리 선택(selectOption), 내용 작성(fillField)을 하고 등록 버튼을 클릭(click)을 하도록 인수 테스트를 작성하고 ui화면으로 검사를 하는데 카테고리 선택하고 내용 입력하고 버튼도 잘 클릭해서 "제목을 입력해주세요"라는 팝업창이 뜨는 것까지는 확인했는데 테스트는 통과가 되지 않았다.

인수 테스트 결과를 보면 "제목을 입력해주세요"라는 문구가 보이지 않아 실패했다는 것이었다.
?? 분명 내 눈에는 팝업창이 아주 잠깐 떴었는데 왜 통과가 안된 거지??라고 생각하고 여러 번 테스트를 다시 돌려보는데 이상한 점을 하나 발견했다.
팝업창이 아주 아주 아주 잠깐 떴다가 바로 닫혀 벼리는 문제와 팝업창의 확인 버튼을 클릭하는 코드가 없는데도 혼자 닫혀버리는 것이었다.
그래서 I.see로는 팝업창의 문구를 테스트하지 않고 무시하는 건가 싶어서 정보들을 찾아보는데 나와 비슷한 문제(alert창 테스트 시 무시되는 문제)를 겪고 있는 사람을 발견했고 해결방안도 같이 올라와 있어 시도해봤는데 해결이 되지는 않았다.

그래서 codeceptjs사이트를 들어가 alert 창 테스트하는 방법이 있는지 찾아봤는데 I.seeInPouop(테스트할 문구)으로 테스트할 수 있는 것을 알게 되었다.


codeceptjs를 이용해 인수 테스트할 때 사용하던 것만 사용했었는데 이번에 codeceptjs의 문서를 보면서 더 다양한 방법으로 테스트할 수 있다는 걸 알게 되었다. 결국엔 블로그 같은 곳 보다 codeceptjs의 공식문서에서 해결방법을 얻을 수 있었다.
문제가 발생하면 무의식적으로 블로그 같은 글을 먼저 보게 되는데 의식적으로 공식문서를 먼저 보는 연습이 필요함을 느꼈다.

이후 저녁을 먹고 다시 인수 테스트 전체를 실행해보는데 이전에 잘되던 테스트들이 갑자기 작동하지 않는 것이었다. (게시글 작성, 댓글 작성 등등 POST 관련 기능들)
중간에 작업한 게 localstorage의 accessToken을 얻어서 사용자 정보를 불러올 때 accessToken을 전달해 사용자 정보를 인증하는 작업을 했었는데 이게 문제였었다. 글이나 댓글을 작성할 때 사용자의 정보도 같이 전달이 되도록 되어있는데 인수 테스트할 때 사용자 정보를 얻기 위해 전달할 accessToken이 없으니 얻어올 사용자 정보도 존재하지 않아 작성이 되지 않았던 것이었다.

그래서 테스트할 때 맨 처음에 accessToken을 줄 수 있는 방법이 있을까 고민하다 때마침 나와 비슷한 문제를 미리 겪었던 동료분의 TIL이 올라와서 도움을 얻을 수 있었다.
결론은 인수 테스트 시 accessToken 직접 넣어주면서 까지 테스트를 하는 것보다 간단히 로그인 기능을 구현하고 사용자 정보가 필요한 테스트를 하는 게 맞다는 결론이 나왔다.
인수 테스트도 불필요하게 무지성으로 많이 한다고 좋은 게 아니라 기능을 검증하는데 필요한 테스트만 해야 한다는 것을 알게 되었다.

Reference: https://codecept.io/helpers/Puppeteer/#puppeteer
https://codecept.io/puppeteer/#interactive-pause% EF% BB% BF