模拟Movie.js时区以进行笑话测试

时间:2020-08-28 04:23:07

标签: javascript unit-testing jestjs timezone momentjs

这是我的打字稿模块,它获取格式化的时间字符串。

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时区运行。 任何想法可能出什么问题吗?

0 个答案:

没有答案