Node.js

Jest

25G 2023. 1. 25. 19:54

Jest란

페이스북에서 만든 js언어기반 테스트 프레임워크입니다.

test() or it()

위 두가지 함수로 테스트를 작성할 수 있습니다.

test('1은 1이야', ()=>{
    expect(1).toBe(1);
})

expect(): 말그대로 기대하는 값이다.

toBe()

toBe()는 Matcher라고 합니다. toBe는 숫자나 문자 등 기본타입값을 비교할때 사용합니다.

  • toBeNull : 결과가 Null값이길 기대
  • toBeUndefined : 결과가 Undefined를 기대
  • toBeDefined : 결과가 Defined이길 기대
  • ToBeTruthy : boolean값 ture
  • toBeFalsy : boolean값 false
  • toBeGeraterThan : 수가 더 크다
  • toBeGreaterThanOrEqual: 수가 크거나 같다
  • toBeLessThan :수가 더 작다
  • toBeLessThanOrEqual : 수가 작거나 같다

객체와 배열을 비교할때 toEqual()

객체나 배열은 재귀적으로 돌면서 값을 확인해야하기때문에 toEqual()을 사용합니다.

toContain : 배열에서 특정 문자열이 있는지 판단할때

예외가 발생했는지 비교할때

  • toThrow() : 이 함수 인수에 특정 기대하는 에러값을 넣을 수 도 있다.

-toStrictEqual()

문자열과 관련된 비교

  • toMatch() : 정규표현식을사용해서 해당 문자열이 포함돼 있는지 체크합니다.

비동기 코드를 test할때

  • 콜백처리할때
    done이라는 콜백함수를 넣어주면 된다.
    test('',done =>{})
  • Promise처리 할때
    return을 사용하면된다.

혹은 matcher를 사용합니다.
return expect(fn.getAge()).resolves.toBe(30);

  • async await 사용할때
    test('', async () =>{
    const test = await test.test()})

태스트 전후에 해줘야할 작업

jest에서는 태스트 전 후에 해줘야할 작업들이생기는데 DB I/O작업같은 경우 굉장히 태스트하기가 어렵습니다. 하지만 그런처리를 해 줄 수 있도록 helper함수를제공해 줍니다.

discribe('userDB 테스트' () =>{ //하나의 주제로 묶을때
beforeEach(async () =>{ //테스트 전에 해줘야할 작업
user = await fn.connetion()
})
afterEach(() =>{ // 테스트 후에 해줘야 하는작업
return fn.disconnectDB()});
});

다음과같이 테스트를 할때마다 디비연결을 끊었다가 연결했다가 하는것이아닌 테스트케이스의 수와 상관 없이 테스트를 시작하기 전후 과정의 코드를 명시해 놓는 것입니다.

  • 실행 순서
    가장 밖에있는 deforeAll or beforeEach가 가장 먼저 실행되고
    그다음 test케이스를실행한다음
    가장 밖에있는 afterEach가 실행됩니다. 그리고 describe가 있다면 그 안에 있는 bdforeAll or beforeEach가 실행되고그다음 describe안에 있는 afterEach가 실행된다음 describe 안에있는 afterAll은 가장 마지막에 실행되고 가장 밖에 있는 afterAll이 실행되면서 테스트가 종료됩니다.

test.only를 사용하면 해당 test 케이스만 실행됩니다.

mock 함수

mock function : 테스트를 하기위해 흉내만내는 가짜 함수
예를 들어 네트워크상태나 외부요인에 의해서 테스트를 하기 힘든 경우에는 mock function 을 사용하는것이 효율적입니다.

const mockFn = jest.fn()
mockFn();
mockFn(1); // mock함수에는 call라는 배열이 나옵니다. 즉 호출됐던 값들이 고스란히 저장돼 있습니다.

//다음과 같이 응용가능
test('배열태스트' () =>{
 expect(mockFn.calls.legnth) //전달한 값의 갯수
})
  • mockFn.mockReturnValueOnce : 어떠한 하나의 리턴값을 기대할때
  • mockFn.mockReturnValue : 어떠한 리턴값을 기대할때
  • mockResolvedValue: 비동기함수를 흉내 낼 수 있다.

mocking 모듈

test를할때 실제 db의 데이터를 건드는것은 좋지 않습니다 .그렇기 때문에 가상으로 db데이터를주고 받는 것 처럼 테스트를 해 볼 수 있습니다.

const fn = jest.mock("./import파일")
mock.createUser.mockREturnValue({name: 'jhon"});
  • toBeCalled() 한번이라도 호출됐다면 통과
  • toCalledTimes() 정확한 호출 횟수
  • toBeCalledWith() 인수를 어떤값들을 받았는지 체크
  • lastCalledWith() 마지막으로 어떤 인수를 받았는지 체크

'Node.js' 카테고리의 다른 글

express에 에러처리  (0) 2023.01.25
Node 에서 단위테스트/ 통합 테스트  (0) 2023.01.25
Node.js ?  (0) 2023.01.25
express/ 미들웨어  (0) 2023.01.25
package.json ?  (0) 2023.01.25