테스트코드

Jest를 이용하여 테스트를 하는 와중, 다음과 같은 에러메시지가 발생하였다. Jest did not exit one second after the test run has completed. This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue. 그래서 적혀져 있는대로 --detectOpenHandles 을 붙여서 아래처럼 실행 해봤더니 똑같이 에러가 발생하였다. npm run test some.spec.ts --detectOpenHandles stackov..
일반적으로 Unit Test에서는 Database나 네트워크 연결을 하지 않고, 보통 mock을 이용하여 test를 진행한다. 하지만, 실제 DB와 연결하여 테스트를 해보라는 팀장님의 의견으로 테스트용 DB를 생성하고 해당 DB와 연결하여 테스트를 진행해 보았다. 우선, 테스팅 모듈에 database와 연결해줄 필요가 있기에, 기존에 만들어 두었던 database.module을 import 하여 주었다. database.module.ts의 코드는 아래와 같다. @Module({ imports: [ TypeOrmModule.forRootAsync({ imports: [ ConfigModule.forRoot({ envFilePath: process.env.NODE_ENV === 'test' ? '.env.t..
NestJS에서 DB조회를 하기 위해 자주 쓰이는 createQueryBuilder, 그리고 그 이후 연결되는 chained method들을 mocking하는 방법에 대해 정리해보고자 한다. 테스트 대상 오늘 테스트 대상은 아래와 같다. mrlogRepository 라는 곳에서 데이터를 원하는 형식으로 뽑아오는 간단한 메소드이다. 해당 메소드를 만들 때에는 딱히 어려움이 없었지만, 테스트 코드를 만들 때 꽤나 골치가 아팠다. export class MrLogService { constructor( @InjectRepository(MRLog) private mrlogRepository: Repository, ) {} async dashboardMrLog(): Promise { const [latest2H,..
테스팅에 대한 글을 보면 항상 빠지지 않고 나오는 말이 있다. 각각의 테스트는 독립적이어야 한다. 하나의 테스트가 다른 테스트에 영향을 주면 안된다. 근데 실제로 어떤 경우에 테스트가 독립적이지 않게 되고, 그 경우에는 어떻게 리팩토링하여 독립성을 유지할 수 있을까? 테스트 코드 작성이 처음(필자 포함)이라면 사람은 착하게 살아야 한다라는 말 처럼 뭔지는 알겠지만, 너무 막연하게만 느껴진다. 이 글에서는 어떻게 하면 좋은 테스트코드를 작성 할 수 있는지에 대해 실제 예시를 보면서 알아볼 예정이다. 아래 내용은 Unit Testing Best Practices 글과 리팩토링 2판 책의 테스트구축 부분을 참고하였다. 1. 각각의 테스트는 독립적이어야 한다 아래 코드를 살펴 보자.(물론, 너무 극적일 수는 있..
현재 사내 프로젝트의 백엔드 프레임워크로 NestJS를 사용중이다. 지금까지 개발자 한명이 코드를 작성하였고, 구현에 급급하여 테스트코드없이 개발을 해왔으나, 현재 잠깐의 여유가 생겨 단위 테스트 코드를 작성하기로 결정하였다. (Jest 공식문서를 참고하였다.) Framework? - Jest JavaScript를 지원하는 테스팅 프레임워크는 굉장히 다양하나, NestJS에서 기본으로 제공하는 라이브러리(Jest기반)가 있기에 해당 라이브러리를 사용하기로 하였다. Testing Structure 먼저, 테스팅코드의 구조가 어떻게 구성되어 있는지 알아본 뒤, NestJS에서 실제로 어떻게 사용할 수 있는지 알아보자. 테스팅코드는 하나의 큰 테스트 스위트(test suite) 안에 여러개의 관련된 테스트 ..
moyanglee
'테스트코드' 카테고리의 글 목록