나만보는개발공부블로그

new Date() 객체 mock 처리 본문

Web Development/Back

new Date() 객체 mock 처리

alexrider94 2022. 9. 22. 08:11

Jest를 통해 테스트를 작성할때 Date() 객체와 관련된 데이터들의 시간을 임의로 설정해서 테스트를 해야하는 상황이 생길 수 있다.

이러한 경우, new Date()함수를 jest.fn()을 통해서 임의로 실행된 node환경에서의 Date()의 시간을 내가 원하는 시간대로 설정할 수 있다.

Jest version 26을 기점으로 작성하는 방식이 다른데 

 const mockDate = new Date(2022,11,22);

//version 26이상

jest
  .useFakeTimers()
  .setSystemTime(mockDate);

//version 26이하

//before test
const spy = jest
    .spyOn(global, 'Date')
    .mockImplementation((...args) => {
        if (args.length) {
            return new DateReal(...args);
        }
        return mockDate;
    })

//after  test
spy.mockRestore()

위와 방식으로 사용할 수 있는데, new Date()객체에는 적용할 수 있지만 Date.now()를 사용할 수 없는데 이런 경우에는 

Date.now = jest.fn(() => mockDate.getTime())

//

const dateSpy = jest
.spyOn(global.Date, 'now')
.mockImplementation(() => Date.parse(mockDate));

 이런식으로 접근할 수 있다.

만약 DB에 Insert하는 상황에서 parse처리가 제대로 되지않는경우도 생기는데.. 이런 경우는 mockdate library를 사용하면 편하다.
https://www.npmjs.com/package/mockdate


 

mockdate

A JavaScript mock Date object that can be used to change when "now" is.. Latest version: 3.0.5, last published: a year ago. Start using mockdate in your project by running `npm i mockdate`. There are 144 other projects in the npm registry using mockdate.

www.npmjs.com



MockDate.set(customDate);

//after using it.

MockDate.reset();

'Web Development > Back' 카테고리의 다른 글

NestJS-시작하기  (0) 2021.09.25
[CentOS] mariaDB 설치 및 외부 접속 권한 설정  (0) 2021.02.06
[CentOS] node & pm2 & backend 서버 배포  (0) 2021.02.06
[CentOS] Nginx & React 배포  (0) 2021.02.06
[CentOS] Nginx 설치  (0) 2021.02.06