41 lines
1 KiB
JavaScript
41 lines
1 KiB
JavaScript
import { createJestExecutionWatcher } from '../jest_execution_watcher';
|
|
import { RealDate, createFakeDateClass } from './fake_date';
|
|
|
|
const throwInsideExecutionError = (fnName) => {
|
|
throw new Error(`Cannot call "${fnName}" during test execution (i.e. within "it", "beforeEach", "beforeAll", etc.).
|
|
|
|
Instead, please move the call to "${fnName}" inside the "describe" block itself.
|
|
|
|
describe('', () => {
|
|
+ ${fnName}();
|
|
|
|
it('', () => {
|
|
- ${fnName}();
|
|
})
|
|
})
|
|
`);
|
|
};
|
|
|
|
const isExecutingTest = createJestExecutionWatcher();
|
|
|
|
export const useDateInScope = (fnName, factory) => {
|
|
if (isExecutingTest()) {
|
|
throwInsideExecutionError(fnName);
|
|
}
|
|
|
|
let origDate;
|
|
|
|
beforeAll(() => {
|
|
origDate = global.Date;
|
|
global.Date = factory();
|
|
});
|
|
|
|
afterAll(() => {
|
|
global.Date = origDate;
|
|
});
|
|
};
|
|
|
|
export const useFakeDate = (...args) =>
|
|
useDateInScope('useFakeDate', () => createFakeDateClass(args));
|
|
|
|
export const useRealDate = () => useDateInScope('useRealDate', () => RealDate);
|