TIL-20220908

khundi·2022년 9월 8일
0
post-thumbnail

테스트 주도 개발(TDD)

테스트 주도 개발은 Test Driven Development의 약자이다. TDD는 테스트 코드를 작성하고 코드를 하나씩 통과시켜서 만드는 개발방법이다. 대표적인 자바스크립트 테스트 툴은 karma, mocha, jest,cypress 등이 있다.

TDD 장점

  • 코드를 수정하거나 기능을 추가할 때 수시로 빠르게 검증 할 수 있다.
  • 리팩토링 시에 안정성을 확보할 수 있다.
  • 개발 및 테스팅에 대한 시간과 비용을 절감할 수 있다.
  • 요구사항에 필요한 부분만 코드를 작성할 수 있다.

TDD 단점

  • 가장 큰 단점은 생산성의 저하이다.
    기능을 담당하는 코드 1개만 작성하면 됐는데, 테스트 코드까지 2개의 코드를 짜야하고, 중간중간 테스트코드도 고쳐나가야 하기 때문이다.

TDD의 필요함을 느꼈을 때

자동차 경주 게임, 로또 과제를 진행하면서 매번 계속해서 제대로 동작하는지 과제 결과를 열어서 일일이 값을 넣어주고 테스트 해보면서 TDD의 중요성을 느꼈다.

JEST 기본 문법

describe

테스트 그룹을 묶어주는 역할, 그안의 콜백함수 내에 테스트에 쓰일 가짜 변수, 객체들을 선언하여 일회용으로 사용할 수 있다.

test, it

이 두 함수는 완전히 동일한 기능을 하는 함수다.

기존 많이 사용되었던 Mocha나 Jasmin 같은 테스트 라이브러리에서 함수명을 it()을 사용하였기 때문에, Jest에서도 it()을 test() 함수의 별칭으로 제공해주고 있는 것이다.

expect

테스트하는 값과 기대값을 비교하기 위해 사용하는 함수이다.

equal

expect(테스트값).to.equal(기대하는값);

테스트값과 기대하는값이 일치하는지 테스트하는 함수이다.
일치연산자(===) 같이 비교한다.

eql

expect(테스트값).to.eql(기대하는값);

const myObject = {
    testProperty: 'testValue',
    deepObj: {
        deepTestProperty: 'deepTestValue'
    }
}
const anotherObject = {
    testProperty: 'testValue',
    deepObj: {
        deepTestProperty: 'deepTestValue'
    }
}
const myOtherReference = myObject;

expect(myObject).to.eql(anotherObject); // true: 모든 프로퍼티의 값이 같기 때문.
expect(myObject).to.eql(myOtherReference) // true: 위와 이유 같음.

equal과 다르게 eql은 동일한 값을 가지고 있으면 통과한다.

<참조>
https://stackoverflow.com/questions/36798993/what-is-the-difference-between-equal-and-eql-in-chai-library

사용법

describe('group1', () => {
  it('일치하는지 확인하는 테스트', () => {
    expect(기대하는값).기대하는조건;
    expect(isEven(5)).to.be.true; // 'isEven(5)'의 결과값은 참(true)이어야 한다.
    expect(3 + 4).to.be.equal(7); // '3+4'의 결과가 7과 같아야(equal)한다.
    expect(obj1).to.be.eql({ a: 2 }); // 'obj1'의 값과 '{a:2}'과 안의 값이 같아야한다.
  });
});
profile
안녕하세요. 웹 프론트엔드 개발자 전성훈입니다.

0개의 댓글