概要
- Jest で
jasmine.clock().mockDate()
を使用するための拡張のサンプルです。
MockDate
を使用して実現しています。
Date.now()
・new Date()
・moment()
などの値が MockDate
により上書きされます。
- ちなみに Jestでは Jasmine記法でのテストコード実装が可能です。
jasmine.createSpy
なども使用できます。 jasmine.clock().mockDate()
も型参照はできますが 実行時に undefined
になります。
前回の記事
kakkoyakakko2.hatenablog.com
実行環境
- Node.js - 10.x
- Yarn - 1.13.x
使用ライブラリ
- Jest - 24.9.x
- MockDate - 2.0.x
- ts-jest - 24.0.x
設定方法
jest.config.js
の setupFilesAfterEnv
で指定したファイル内で jasmine.clock().mockDate()
を拡張します。
jasmine.clock().mockDate()
拡張時に mockdate.set()
を呼び出して日時を上書きます。
サンプル
jest.config.js
module.exports = {
"testEnvironment": "node",
"verbose": true,
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(ts|tsx)$": "ts-jest"
},
"globals": {
"ts-jest": {
"tsConfig": "tsconfig.json"
}
},
"testMatch": [
"**/test/*.+(ts|tsx|js)"
],
"resetMocks": true,
"setupFilesAfterEnv": [
"./setup-clock-patch.ts"
]
};
setup-clock-patch.ts
import * as mockdate from 'mockdate';
// jasmine.clock().mockDate defined
jasmine.clock = () => {
return {
mockDate: (date) => {
mockdate.set(date);
}
} as any;
};
beforeEach(() => {
mockdate.reset();
});
test/data-test.ts
describe('Date', () => {
it('now', () => {
// setup
jasmine.clock().mockDate(new Date(2019, 1, 1));
// exercise
const actual = Date.now();
// verify
expect(actual).toBe(new Date(2019, 1, 1).valueOf());
});
it('new Date()', () => {
// setup
jasmine.clock().mockDate(new Date(2019, 2, 1));
// exercise
const actual = new Date();
// verify
expect(actual.valueOf()).toBe(new Date(2019, 2, 1).valueOf());
});
it('mockDate reset check', () => {
// exercise
const actual = new Date();
// verify
expect(actual.valueOf()).not.toBe(new Date(2019, 2, 1).valueOf());
});
});
github.com
参考URL
jestjs.io
www.npmjs.com