概要
- Jest 24.9 では
jasmine.clock().mockDate
のように Dateをテスト用に上書き機能がありません。
mockdate
ライブラリを利用して jasmine.clock().mockDate()
を代用できます。
実行環境
- Node.js - 10.x
- Yarn - 1.13.x
使用ライブラリ
- Jest - 24.9.x
- mockdate - 2.0.x
- ts-jest - 24.0.x
設定方法
- テスト実行時に
mockdate.set()
メソッドを使用してテスト用のDateを設定する。
- Jest の
setupFilesAfterEnv
で初期化用ファイルを指定する。初期化用ファイル内で beforeEach()
を定義して、その処理内で mockdate.reset()
を実行する。
サンプル
{
// jest設定のみ抜粋
"jest": {
"testEnvironment": "node",
"verbose": true,
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(ts|tsx)$": "ts-jest"
},
"globals": {
"ts-jest": {
"tsConfig": "tsconfig.json"
}
},
"testMatch": [
"**/test/*.+(ts|tsx|js)"
],
"setupFilesAfterEnv": [
"./setup-clock-patch.ts"
]
}
}
setup-clock-patch.ts
import * as mockdate from 'mockdate';
beforeEach(() => {
mockdate.reset();
});
./test/date-test.ts
import * as mockdate from 'mockdate';
describe('Date', () => {
it('now', () => {
// setup
mockdate.set(new Date(2019, 1, 1));
// exercise
const actual = Date.now();
// verify
expect(actual).toBe(new Date(2019, 1, 1).valueOf());
});
it('new Date()', () => {
// setup
mockdate.set(new Date(2019, 1, 1));
// exercise
const actual = new Date();
// verify
expect(actual.valueOf()).toBe(new Date(2019, 1, 1).valueOf());
});
it('mockdate reset check', () => {
// exercise
const actual = new Date();
// verify
expect(actual.valueOf()).not.toBe(new Date(2019, 1, 1).valueOf());
});
});
github.com
その他
mockdate.set()
は moment.js
にも有効です。