드디어 Node.js 심화주차가 끝났다..! 이번주도 역시나 시간이 순식간에 지나갔다.다음주는 얼마나 더 빨리 갈까.사실 기대보다는 걱정이 앞선다. 자신감이 없어서 일까. 그렇다. 내 실력에 대한 자신감이 없어서겠지.그래서 항해99를 신청한거고.지금은 비록 많이 부족할지라도 꾸준히 열심히 하다보면 언젠가 빛을 볼 것이라 생각한다.고로 난 멈추지 않고 달려갈것이다.
이번주 배운 내용 중에 특히 미들웨어와 테스트코드가 내 머릿속에 구름같이 떠다닌다. 미들웨어에 대해서는 저번에 포스팅 했기에 테스트코드에 대해서 잠깐 정리해보겠다.
테스트 코드란 코드가 안정적이고 제대로 동작하는지 확인하기 위해 작성하는 코드이다. 이를 통해 특정 동작을 하는 코드가 예상과 동일하게 결과를 잘 내는지 품질 검사하는데 사용한다.
그러면 테스트코드를 작성하면 정확히 무엇이 좋은걸까?
크게 3가지로 나누어보면,
이번 테스트 코드를 작성할 때 Javascript Test 프레임워크 중 jest를 사용했다.
우선 프로젝트에 jest를 설치해주었다. 아래의 명령어로 설치할 수 있다.
npm install --save-dev jest
다음은 package.json 에 scripts test 설정을 해줘야한다.
"scripts": {
"test": "jest",
},
이제
npm test 또는 yarn test
를 통해 테스팅을 실행할 수 있다.
특정 경로에서 파일 이름(확장자 포함)만 추출해내는 함수 getFileName 이 있다고 가정하자.
-src
-getFileName.js
-getFileName.spec.js (-> 테스트 파일)
현재 간단히 파일 구조는 이렇다.
getFileName.js에 대한 테스트 코드를 작성해보았다.
getFileName.spec.js
import getFilename from "./getFileName";
test('utils.getFilename', () => {
expect(getFilename('bin/abc.js')).toBe('abc.js');
})
우선 큰 테스트 코드 구조는 아래와 같다.
test('테스트 코드명', () => {
expect(실행값).toBe(기댓값);
})
코드를 해석해보자면 getFilename('bin/abc.js')의 결과값이 'abc.js'가 되는지 테스트 하는 것이다.
참고로 여기서 .toBe() 는 기댓값을 나타날때 쓰는 Jest가 제공하는 Matcher 함수들 중 하나이다.
아래에서 더 많은 Matcher 함수들을 알아보자.
.toBe()
숫자나 문자와 같은 객체가 아닌 기본형 값을 비교할 때 사용한다.
.toEqual()
객체 단위를 비교할 때 사용한다.
.toBeTruthy() .toBeFalsy()
true(1)인지 false(0)인지 비교한다.
expect(0).toBeFalsy();
.toHaveLength()
배열의 길이를 확인할 때 사용한다.
.toContain()
배열이 특정원소를 담고 있는지 검사할 때 사용한다.
const numbers = ['a', 'b', 'c', 'd'];
expect(numbers).toHaveLength(4);
expect(numbers).toContain('b');
.toMatch()
일반 문자열이 아닌 정규식 기반의 테스트를 할 때 사용한다.
expect(getEmail('gggg@naver.com'))
.toMatch(/.*naver.com$/);