[Node.js] 테스트 코드

Asher Park·2022년 12월 28일
0

내일배움캠프_Node.js

목록 보기
16/17
post-thumbnail

스파르타코딩클럽 내일배움캠프 Node.js 심화주차 강의를 들으며 공부한 것을 적은 것입니다.

테스트 코드

  • 우리가 개발한 코드가 의도대로 동작하는지 작성하는 코드
  • "내 코드가 멀쩡하다면 이렇게 결과가 나와야 한다!"

종류

  • 단위 테스트 : 가장 작은 규모의 기능을 테스트
  • 통합 테스트 : 여러가지 기능을 합쳤을 때 생기는 문제 방지를 위한 테스트
  • E2E 테스트 : 종단 간 테스트 (백~프론트)

Jest

  • 페이스북에서 개발한 테스팅 프레임워크
  • Javascript 개발자들 사이에서 가장 많이 사용되는 테스팅 프레임워크
  • 테스트 코드의 표현이 다른 프레임워크보다 훨씬 간결
npm i jest -D
{
  ...
  	"scripts" : {
    	"test": "jest"
    }
  ...
}

사용법

  • 테스트할파일이름.spec.js 형식으로 파일을 만든다
  • test() : 단위 테스트를 묶어주는 함수
  • expect() : 특정 값이 만족되는지 확인하기 위한 표현식을 작성 할 수 있게 해주는 함수
  • validation.js
module.exports = {
  isEmail: (value) => {
    const email = value || '';
    
    if (email.split('@').length !== 2) {
      	return false;
    } else if (email.includes(' ')) {
    	return false;
    }
    
    return true;
  }
}
  • validation.spec.js
const { isEmail } = require('./validation');

test('입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.', () => {
    expect(isEmail('my-email@domain.com')).toEqual(true); 
    expect(isEmail('my-email@@@@domain.com')).toEqual(false); 
    expect(isEmail('my-emaildomain.com')).toEqual(false); 
});

test('입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.', () => {
    expect(isEmail('myemail@domain.com')).toEqual(true);
    expect(isEmail('my email@domain.com')).toEqual(false);
});

Jest Configs 설정

// jest.config.js
module.exports = {
    // 해당 패턴에 일치하는 경로가 존재할 경우 테스트를 하지 않고 넘어갑니다.
    "testPathIgnorePatterns": ["/node_modules/"],
    // 테스트 실행 시 각 TestCase에 대한 출력을 해줍니다.
    verbose: true,
}

Jest Scripts 설정

// package.json

{
    ...

    "scripts": {
        ...

        "test": "jest --forceExit",
        "test:silent": "jest --silent --forceExit",
        "test:coverage": "jest --coverage --forceExit",
        "test:unit": "est __tests__/unit --forceExit",
        "test:integration": "jest __tests__/integration --forceExit"
    },

    ...
}
  • --forceExit : 테스트 완료되었을 때, Jest 강제 종료
  • --silent : console.log 출력 x
profile
배움에는 끝이없다

0개의 댓글