这是我的打字稿模块,它获取格式化的时间字符串。
const getFormattedTime = (time: number, showTimezone = false, isUTC = false) => {
if(!time || time < 0) {
return '';
}
const date: moment.Moment = moment(time).local(!isUTC);
console.log('DATE IS ::', date);
if(showTimezone) {
return date.format(DATE_FORMAT_WITH_TIMEZONE)
}
return date.format(DATE_FORMAT);
};
export default getFormattedTime;
我在Jest中为此功能编写了测试。
import getFormattedTime from './getFormattedTime';
describe('getFormattedTime()', () => {
// jest.mock('moment', () => {
// // let isUTC;
// const moment = jest.fn(() => {
// return {
// local: jest.fn(() => false),
// isUTC: jest.fn(() => true),
// }
// })
// // Helper for tests to set expected value
// // moment.local = (value: boolean) => {
// // isUTC = value;
// // return isUTC;
// // };
// return moment;
// })
const origDate = Date.now;
beforeEach(() => {
Date.now = jest.fn(() => Date.UTC(2020, 2, 2, 0, 0, 0));
});
afterEach(() => {
Date.now = origDateNow;
});
it.each`
time | showTimezone | expected
${Date.UTC(2020, 2, 2,0, 0, 0)} | ${true} | ${'03/02/2020, 12:00:00 AM +00:00'}
${Date.UTC(2020, 2, 2,0, 0, 0)} | ${false} | ${'03/02/2020, 12:00:00 AM'}
`('formats time into human readable format if timezone passed in = $showTimezone', ({time, showTimezone, expected}) => {
expect(getFormattedTime(time, showTimezone, false)).toBe(expected);
});
});
我尝试了几种方式的嘲笑,但都行不通。 这里的想法是使所有测试无论在哪种环境下运行都以UTC时区运行。 任何想法可能出什么问题吗?