[node.js] TDD / Jest(관련링크)
JavaScript & TypeScript

[node.js] TDD / Jest(관련링크)

반응형

 

1. TDD

 

TDD는 Test Driven Development의 약자로 '테스트 주도 개발', 개발하는 방식을 이야기 합니다.

쉽게 말해서 예상하거나, 원하는대로 코드가 동작하는지 확인 및 점검을하는 것 입니다.

수학문제를 풀 때 주로 하는 검산과 같은 맥락입니다. 이 검산을 자동으로 계속해서 반복하여 확인을 해주는 것 입니다.

 

TDD <> Refactoring

만약 TDD를 구현하지 않으면 코드가 제대로 동작을 하는지 확인하기 위해서는, 모든 동작을 하나하나 일일이 눌러봐야하고, 시간이 굉장히 오래 걸립니다. 추가적으로 기능을 변경하거나 리팩터링을 하면서 결과값이 바뀌거나 버그가 생길 수 있습니다.

하지만 TDD를 작성한다면 이러한 문제점들을 신경쓰지 않고 쉽게 바로잡으면서, 시간절약과 동시에 빠르게 개발을 진행 할 수 있습니다.

또한 좋은 TDD를 작성하려면 서로 코드간의 의존성을 낮춰야하기 때문에 모듈들이 독립적이고, 재사용할 수 있게 많은 도움이 되며, 좋은 문서화 효과도 가질 수 있기 때문에 TDD는 꼭 필요합니다.

 

 

 

TDD에도 종류가 있습니다.

  • Unit Test(유닛 테스트) : 각각의 함수, 클래스 같은 작은 단위의 테스트이며
  • Integration Test(통합 테스트) : 각각의 함수들이 모여 하나의 상호작용하며, 동작을 하는지 확인하는 테스트 입니다. 
  • E2E(end-to-end) : 사용자 테스트로 사용자의 입장에서 테스트 하는 것 입니다.

 

하지만 이 테스트들이 모두 동일한 양으로 테스트를 하지 않고, 주로 피라미드 형태로 테스트를 합니다.

위로 갈수록 비용이 많이 들고 속도도 느립니다. 

유닛 테스트는 작은 단위로 즉각적으로 에러 확인이 가능하지만 E2E의 경우에는 사용자가 테스트 함으로 서버내에 정확히 어느부분에서 에러가 나는지 찾기가 어렵기 때문에 피라미드 형태로 테스트를 진행합니다.

 

유닛테스트가 빠르고 비용이 적게들어 유닛테스트만 하면 되지 않나? 라는 생각을 했지만.
결국 코드는 맞물려서 돌아가는 것과 같기 때문에, 유닛 테스트만 하게 되면 아래와 같은 현상을 알아차리지 못할 수도 있습니다.

 

TDD는 개발하는 방식이기 때문에 모든 곳에 TDD를 작성해야 할 이유는 없지만, 구현하고자 하는 요구사항이 명확하거나, 협업시 내가 어떻게 어떠한 코드를 짰는지에 대한 문서화, 이정표 같은 역할이기 때문에 이러한 상황에서 TDD를 사용한다면 좋다고 생각합니다.

 

CI/CD참고 https://www.youtube.com/watch?v=0Emq5FypiMM

 

 

2. Jest

 

  Jest는 자바스크립트에서 테스트 할 수 있게하는 프레임워크 입니다.

jest 공식문서 에서 다양한 특징과 장점을 설명 해주고 있습니다.

 

Jest 

공식문서가 잘 되어있어서 어떻게 시작하는지에 대해 설명이 잘 나와있습니다.

jest getting-start 공식문서 - https://jestjs.io/docs/getting-started

기본적인 jest 사용 블로그 - https://www.daleseo.com/jest-basic/

 

Faker

보통 동작이 잘되는지 테스트를 하다보면 임의의 값을 넣게 되는데, 그 임의의 값을 자동으로 알아서 값을 만들어 주는 faker을 사용합니다. 다양한 데이터를 만들 수 있다보니 그에 해당하는 메서드들도 워낙 많아서 찾아보면서 써야합니다.

(최신버전에 문제가 있었으므로, 안되면 5.5.3 버전을 사용하시면 됩니다.)

faker - https://fakerjs.dev/

 

jest - expect

그리고 jest는 테스트하고 난 출력값을 expect를 사용하여 비교를 합니다.

expect 뒤에 따라오는 메서드를 설정하여 어떻게 비교할지 설정 가능합니다.

뒤에 따라오는 메서드들이 워낙 많기 때문에 정리를 해놓은 사이트 입니다.

jest - expect  https://runebook.dev/ko/docs/jest/expect

 

구현을 하면서 쓰는 다양한 메서드를 사용하기 어려워 전부 알기 힘들고, 전부 정리를 하는 것은 비효율적이다 생각해 링크를 달아 두었습니다.

반응형

'JavaScript & TypeScript' 카테고리의 다른 글

[TS] Type  (0) 2022.03.07
[TS] Type Script  (0) 2022.03.06
[Node.js] TDD를 위한 Dependency Injection  (0) 2022.02.21
[Node.js] Sequelize ondelete  (0) 2022.02.15
[JS] CommonJS와 ES6  (0) 2022.02.13