问题
I have the util function that is parsing given date (i.e. '2019-01-28') in specific date format and then using momentJS retrieving beginning of that day and converting it to ISO date format:
dates.js
import moment from 'moment'
export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) =>
moment(date, dateFormat)
.startOf('day')
.toISOString()
I would like to test this function using Jest and set the specific timezone for moment to use those tests independent of my location.
For now, I have:
dates.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,
)
})
since I'm currently located in Europe/Warsaw timezone. How to make this test location independent?
I've tried to use jest.mock to replace moment used by getApiDateFormat by moment.tz.setDefault("America/New_York"), however, all my attempts have failed since they have no influence on moment lib imported by getApiDateFormat.
How to solve such a problem and test it properly?
回答1:
Use TZ env var...
You can prepend to your package.json so all machines run with the same timezone like so:
"scripts": {
"test": "TZ=UTC jest",
"coverage": "TZ=UTC jest --coverage"
},
回答2:
This worked for me
"scripts": {
"test": "TZ=UTC jest",
"coverage": "TZ=UTC jest --coverage"
}
but ensure "moment-timezone": "^0.5.27" is installed in your npm dependencies
来源:https://stackoverflow.com/questions/56274496/set-moment-timezone-in-jest-tests