[MockDate]テストの時に日付を固定化する方法[JavaScript]


背景

Jestでテストを書いている時に日付の固定化をしたかったのですが、
今まで以下のような感じで、Date.newをmock化していましたが、書くのがめんどくさいなって思ってました。
https://qiita.com/bearII/items/d8a3bc0e83b14b36e64e

結論

以下のパッケージが良さげでした。
https://www.npmjs.com/package/mockdate

以下のように1行でモック化できてテストファイルがスッキリします。
before内でモック化し、after内でモックを解除するだけです。
momentもモックできているのが確認できます。

import MockDate from 'mockdate'
import moment from 'moment'

describe('mock date', () => {
  beforeEach(() => {
    MockDate.set('2000-11-22')
  })
  afterEach(() => {
    MockDate.reset()
  })
  it('new Dateがmock化されていることを確認', () => {
    expect(new Date().getFullYear()).toBe(2000)
    expect(new Date().getMonth()).toBe(10)
    expect(new Date().getDate()).toBe(22)
  })
  it('momentがmock化されていることを確認', () => {
    expect(moment().format('YYYY-MM-DD')).toBe('2000-11-22')
  })
})