tastekim / WeAllLie-BE

👀We Are Lie는 보드게임 '스파이 폴' 을 모티브로한 화상채팅으로 진행하는 온라인 보드게임 플랫폼 입니다 !(~2022.12.22)
3 stars 4 forks source link

[Error] Tset Code 연결 오류 #204

Open yunjin5450 opened 1 year ago

yunjin5450 commented 1 year ago

한 일

게임 로직 테스트 코드를 작성했습니다.

에러 내용

방안1

game-repo.js파일에서 module.exports = GameRepo; 로 변경하여 설정하면 테스트 코드는 잘 돌아갑니다. 하지만 game-socket.js -> game-provider.js -> game-repo.js에서 계층끼리 데이터 전달이 되지 않는 상황이 발생했습니다. 제 생각 이지만 game-socket.js에서 class설정을 못해서 일어나는 상황 같습니다. gmae-provider.js -> game-repo.js 에서는 데이터 전달이 되는데 game-socke.js -> game-provider.js로 데이터 전달이 되지 않습니다.

방안2

우리가 모듈 내보내는 방식 그대로 적용하고 테스트 코드를 연결해 보았습니다. game-socket.js -> game-provider.js -> game-repo.js 계층끼리 데이터 전달이 잘 됩니다. 하지만 테스트 코드에서 함수를 찾을 수 없다고 뜹니다. 생각 나는 방안으로 가짜 함수를 만들어서도 적용해 봤으나 해결 하지 못 했습니다.

조치 사항

4~5시간 동안 모듈 연결과 테스트 코드 두 개 다 연결 하는 방안을 찾아 봤고, 구글에서도 소켓 연결 모듈 방식을 검색하며 찾아봤지만 다른 수확이 없었습니다. 방안2로 하여 game-repo.js와 연결하여 테스트 해봤는데 제가 테스트 하고자 한 것은 돌아가는 걸 확인했습니다.

지금 테스트 코드가 중요한 건 아니라고 판단되어 일단 게임 로직 테스트 코드 연결 방안은 조금 미뤄둬도 무방할 것 같습니다. 혹시 제 이슈를 읽고 좋은 방안이 생각나시는 분 계신다면 시간 날 때 같이 문제 해결해도 좋을 것 같습니다.

환경 설정

OS: Windows 10
Node:  v16.16.0 (@yunjin5450)
npm : v8.19.2 (@yunjin5450)
tastekim commented 1 year ago

저희 지금 클래스 exports 하는 부분 보면 module.exports = new GameRepo() 이렇게 해서 인스턴스를 만들어서 그걸 내보내는 식으로 되어있는데 거기 부분을 module.exports = GameRepo 이렇게 내보내보고 시도해보면 어떨까요?

tastekim commented 1 year ago

저희 지금 클래스 exports 하는 부분 보면 module.exports = new GameRepo() 이렇게 해서 인스턴스를 만들어서 그걸 내보내는 식으로 되어있는데 거기 부분을 module.exports = GameRepo 이렇게 내보내보고 시도해보면 어떨까요?

그 첫번째 시도 방안 에서 let gaemRepo = new GameRepo() 대신 this.gameRepo = new GameRepo() 이렇게요 !

yunjin5450 commented 1 year ago

이 방법도 해봤었는데요! 결과는 같았습니다.😥

ghost commented 1 year ago

방안이라기보다는.. 궁금한 점이 있습니다. image

이렇게 하셨는데 사실 User 스키마는 GameRepo 내의 메소드가 아니라 User를 따로 임포트해서 사용해야 하는 모듈이 아닐까 생각되어서요... 게임 레포 내에서도 GemeRepo.User 이렇게 사용하지는 않으니까...

저는 User 모델 자체는 따로 임포트하고 그 모듈 내의 함수들을 목함수로 대체해서 테스트를 했거든요!

image

이런 식으로요 👇🏻

mockCreate = jest.fn()
mockCreate.mockreturnValue(value)
User.create = mockCreate

또는

        mockCreate = jest.spyOn(User, 'create');
        User.create.mockResolvedValue(value);

테스트코드

image