Backend/JavaScript,NodeJS, Express

[JavaScript] TestCode 작성하기

jellylucy 2022. 10. 5. 20:42

용어 정리

  • Assertion
    • 에러가 없는 프로그램을 작성하기 위한 하나의 수법
  • Mocha 기반 테스트 코드
    • 테스트 러너를 지원하는 자바스크립트 기반의 테스트 프레임워크
    • 자체 assertion 지원 x, 필요한 assertion 라이브러리를 가져와 사용.
    • node에서 지원하는 assert 모듈, chai, should.js 같은 BDD TDD 방식의 다양한 assertion 라이브러리 있다.
    • mocha는 모듈별도 호출x , 사용한 assertion만 require()로 호출
  • BDD, TDD
    • TDD : Test 주도 기반 개발
      • 즉, 테스트 먼저 작성하고 나서 테스트가 정상적으로 돌아갈 때까지 테스트를 하면서 코드를 작성하는 것.
      • 원하는 작업이 제대로 돌아갈 때까지 테스트 코드 작성을 무한대로 반복하며 개발
      • 테스트 종류 중 E2E 테스트 : Endpoint 간의 테스트. 사용자 입장에서 직접 노출되는 부분 점검.
    • BDD : Behavior 행동 주도 개발
      • 사용자의 행위까지 생각하고 테스트하며 개발
      • TDD의 한 종류. but 메소드 위주가 아닌 행동을 강조.
  • test.js
    • 새로운 테스트 케이스를 만드는 함수
    • expect : 특정 값이 ~일 것이다 라고 정의를 하고 통과하면 테스트를 성공시키고 통과를 하지 않으면 테스트를 실패시킨다.
    • toBe : matchers라고 불리는 메소드. 특정 값이 우리가 정한 값과 일치하는지 확인해준다.
const sum = require('./sum');

test('1 + 2 = 3', () => {
  expect(sum(1, 2)).toBe(3);
});

 

  •  describe
    • 테스트 케이스를 작성할 때 describe으로 묶는 경우 여러 테스트 케이스를 묶을 수 있다.

코드 실습

javascript Node.JS로 작성한 CRUD API가 있다고 가정하자.

 

 

0. package.json script에 test 추가하기

test를 어떤 코드로 작성할 것인지 (jest, mocha,,, etc) 기입한다.

  "scripts": {
    "test": "jest --watchAll --verbose"
  }
  "scripts": {
    "test": "env NODE_ENV=test APP_LOGGER=false mocha"
  },

 

1. crudapi.test.js 파일 생성

describe('여러 테스트를 묶을 수 있는 describe', () =>{
  beforeEach(async () =>{
    // 테스트를 실행하기 전 실행되는 함수
  });

  afterEach(async () => {
    // 테스트가 끝나면 실행되는 함수
  });

  it('테스트 1 (it은 mocha 메소드)', async () => {
  	expect(들어오는 값).to.equal(기대하는 값);
    expect(들어오는 값).not.include([예상값]); // 포함되지 않아야 함을 기대하는 것  
    });
  it('테스트 2', async () => {
  	expect(들어오는 값).to.equal(기대하는 값);
    expect(들어오는 값).not.include([예상값]); // 포함되지 않아야 함을 기대하는 것  
  });

})