Tengo un problema al probar dos funciones que convierten la marca de tiempo ISO y Epoch a la zona horaria del cliente. Las pruebas están pasando, pero estoy tratando de modificarlas para que no tengamos que seguir cambiándolas según el horario de verano.
Agregué un poco de código para obtener la abreviatura de la zona horaria usando Date() y toLocaleTimeString() y funciona, excepto que falla en la canalización de CI/CD cuando el servidor devuelve la hora UTC. Aunque estoy agregando opciones para establecer específicamente la zona en América/Chicago, el servidor no parece reconocerlas.
describe('convertISO8601ToClientTimezone', () => { const timestamp = '2021-04-08T19:15:42.410506Z'; const zoneAbbr = new Date(timestamp) .toLocaleTimeString('en-us', { timeZone: "America/Chicago", timeZoneName: 'short' }) .split(' ')[2]; it('should take ISO-8601 return date formatted string of local timezone offset accordingly', () => { expect(convertISO8601ToClientTimezone(timestamp)).toEqual( `April 8th 2021, 2:15:42 PM ${zoneAbbr}` ); }); }); describe('convertEpochTimestampToClientTimezone', () => { const timestamp = 1617909517024179200; // epoch in nanoseconds const zoneAbbr = new Date(timestamp / 100000) .toLocaleTimeString('en-us', { timeZoneName: 'short' }) .split(' ')[2]; it('should take epoch timestamp and return date formatted string of local timezone offset accordingly', () => { expect(convertEpochTimestampToClientTimezone(timestamp)).toEqual( `April 8th 2021, 2:18:37 PM ${zoneAbbr}` ); }); });¿Hay una mejor manera de obtener la abreviatura de zona horaria para América/Chicago en función de una marca de tiempo determinada?
También estoy usando la biblioteca Moment, pero estoy luchando por descubrir cómo obtener el valor necesario del fn simulado. Y, de hecho, no estoy seguro de que ese sea el enfoque recomendado aquí, pero soy bastante nuevo en Jest.
Puede usar la biblioteca moment-timezone https://momentjs.com/timezone/