테스트는 배포하는 것보다 중요하다. 테스트 없이 배포한다는 것은 코드가 언제 오작동해도 이상하지 않다는 것과 같다. 훌륭한 테스트 프레임워크 뿐만 아니라, 훌륭한 Coverage 도구를 사용해야 한다.
타입스크립트 타입을 지원하는 좋은 자바스크립트 테스트 프레임워크가 많이 있다. 새로운 기능/모듈을 짤 때 테스트 코드를 항상 작성하도록 하자.
테스트 기반 개발(TDD)을 선호한다면 훌륭한 개발 방법이 될 수 있다. 하지만 어떠한 기능을 개발하거나 코드를 리팩토링 할 때 무엇보다 목표하는 Coverage를 달성하는 것이 중요하다.
명료한 테스트는 다음 규칙을 따라야 한다.
테스트는 단일 책임 원칙을 따라야 한다. 단위 테스트 하나 당 하나의 assert 구문을 작성하자.
assert 함수
디버깅 모드에서 개발자가 오류가 생기면 치명적인 것이라는 곳에 심어 놓는 에러 검출용 코드이다.
안좋은 예:
import { assert } from 'chai';
describe('AwesomeDate', () => {
it('handles date boundaries', () => {
let date: AwesomeDate;
date = new AwesomeDate('1/1/2015');
assert.equal('1/31/2015', date.addDays(30));
date = new AwesomeDate('2/1/2016');
assert.equal('2/29/2016', date.addDays(28));
date = new AwesomeDate('2/1/2015');
assert.equal('3/1/2015', date.addDays(28));
});
});
좋은 예:
import { assert } from 'chai';
describe('AwesomeDate', () => {
it('handles 30-day months', () => {
const date = new AwesomeDate('1/1/2015');
assert.equal('1/31/2015', date.addDays(30));
});
it('handles leap year', () => {
const date = new AwesomeDate('2/1/2016');
assert.equal('2/29/2016', date.addDays(28));
});
it('handles non-leap year', () => {
const date = new AwesomeDate('2/1/2015');
assert.equal('3/1/2015', date.addDays(28));
});
});
테스트가 실패할 때, 테스트의 이름은 어떤 것이 잘못되었는지 볼 수 있는 첫 번째 표시가 된다.
안좋은 예:
describe('Calendar', () => {
it('2/29/2020', () => {
// ...
});
it('throws', () => {
// ...
});
});
좋은 예:
describe('Calendar', () => {
it('should handle leap year', () => {
// ...
});
it('should throw when format is invalid', () => {
// ...
});
});
참고