【问题标题】:Jest unit test for moment specific format针对特定时刻格式的 Jest 单元测试
【发布时间】:2021-02-26 07:08:50
【问题描述】:

我是新手,开玩笑需要你的帮助

 const DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';
 const DEFAULT_FORMAT = 'MM-DD-YYYY';
 const OUT_TIME_HOUR =23;
 const OUT_TIME_MIN = 0;
 const OUT_TIME_SEC= 0;

export const getTime= (status: boolean): string => {
const date: any = new Date();
let resetDate: string;
if (status) {
 date.setDate(date.getDate() + 1);
 resetDate = moment(date, DEFAULT_FORMAT)
  .utc()
  .set({ h: OUT_TIME_HOUR , m: OUT_TIME_MIN , s: OUT_TIME_SEC})
  .format(DATE_FORMAT);
 } else {
  resetDate= moment(date, DEFAULT_FORMAT)
  .utc()
  .set({ h: OUT_TIME_HOUR , m: OUT_TIME_MIN , s: OUT_TIME_SEC})
   .format(DATE_FORMAT);
}
return resetDate;
};

我想在上面的函数中以开玩笑的形式编写测试用例,例如如果状态为假,则应以 23 小时返回 todayDate 2021-01-12 23:00:00,如果状态为真,则应返回 nextDay 2021-01-13 23:00:00

任何人都可以帮助如何模拟特定时间?

【问题讨论】:

    标签: javascript reactjs jestjs momentjs


    【解决方案1】:

    您需要监视 global.Date 对象,并模拟一些新日期,例如:

    import { getTime } from 'your-path';
    
    describe('get time', () => {
      test('should return 23:00h - today', () => {
        const mockDate = new Date(1610488800000);
        const spy = jest
         .spyOn(global, 'Date')
         .mockImplementation(() => mockDate)
    
        expect(getTime(false)).toEqual('2021-01-12 23:00:00');
    
        spy.mockRestore();
      });
    });
    

    【讨论】:

    • 感谢您的及时回复,不是静态字符串形式的地方,我们可以像 new Date() utc() 这样动态吗?
    猜你喜欢
    • 2022-06-28
    • 2012-10-01
    • 1970-01-01
    • 2018-12-16
    • 2020-08-04
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多