javascript - 在 Jest 测试中设置时刻时区

标签 javascript date mocking jestjs momentjs

我有一个 util 函数,它以特定日期格式解析给定日期(即“2019-01-28”),然后使用 momentJS检索当天的开始并将其转换为 ISO 日期格式:

日期.js

import moment from 'moment'

export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) =>
    moment(date, dateFormat)
      .startOf('day')
      .toISOString()

我想用 Jest 测试这个功能并为 moment 设置特定时区使用这些测试独立于我的位置。

目前,我有:

日期.test.js
const formattedDate = '2019-01-27T23:00:00.000Z'

test('date in russian format - 28.01.2019', () => {
      const russianDateFormat = 'DD.MM.YYYY'
      expect(getApiDateFormat('28.01.2019', russianDateFormat)).toEqual(
        formattedDate,
      )
    })

因为我目前位于 Europe/Warsaw时区。如何使这个测试位置独立?

我尝试使用 jest.mock替换momentgetApiDateFormat 使用通过 moment.tz.setDefault("America/New_York") ,但是,我所有的尝试都失败了,因为它们对 moment 没有影响。由 getApiDateFormat 导入的库.

如何解决这样的问题并正确测试?

最佳答案

使用TZ环境变量...

您可以添加到您的 package.json所以所有机器都使用相同的时区运行,如下所示:

  "scripts": {
    "test": "TZ=UTC jest",
    "coverage": "TZ=UTC jest --coverage"
  },

关于javascript - 在 Jest 测试中设置时刻时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56274496/

相关文章:

javascript - 历史 使用 javascript 在链接中返回

javascript - 命名点击事件绑定(bind)javascript

javascript - 移动菜单帮助,将父链接添加到下拉列表,禁用父链接

unit-testing - 如何在PowerMockito中模拟java.lang.reflect.Method类?

javascript - 如何使用嵌套函数(javascript、jasmine)为第 3 方库编写 mock

javascript - 如何使我的 JavaScript 代码更加动态和可扩展

java - 如何将时间从 GMT 转换为 EST

javascript - UTC 从日期开始的时刻不正确

r - 在 R 中,使用日期范围内的事件计数创建变量

unit-testing - GWT Mockito 集成