Модульный тест Jest для даты и времени проходит локально, но не проходит в CICD Дженкинса

#javascript #unit-testing #datetime #jenkins #jestjs

Вопрос:

Я использую date-fns для разбора некоторых строк, похожих на даты, на даты, а затем обратно в строку, вот так. Мои локальные модульные тесты проходят, но в Jenkins CICD мои модульные тесты проваливаются. Я почти уверен, что это связано с тем, что машина Дженкинса находится в часовом поясе GMT 0, в то время как я нахожусь в часовом поясе GMT 8. Результаты неудачных тестов в Дженкинсе подтверждают это, так как полученные значения на 8 часов отстают от ожидаемых значений.

 import { format } from 'date-fns';

function stringToTime(date: string) {
    const newDate = new Date(date);
    return format(newDate, 'k:mm'); // this returns a string
}
 

И мои модульные тесты:

 const sampleText = 'Mon Aug 02 2021 22:00:15 GMT 0800';
const expectedText = '22:00';
expect(stringToTime(sampleText)).toEqual(expectedText); // this passes locally
 

В моем CICD Дженкинса я получаю 14:00 вместо этого. Является ли это распространенной проблемой, и как быстро я могу исправить свои модульные тесты, чтобы они могли передаваться Дженкинсу?

Комментарии:

1. Я не могу этого сказать, если это общая проблема. Но я также сталкиваюсь с проблемой с датой и временем в Дженкинсе. В вашем случае я бы запустил тесты внутри контейнера docker на Дженкинсе.

2. Учитывая, что метка времени имеет смещение, она должна быть проанализирована до точно такого же значения времени в обеих средах, но время, возвращаемое из формата , будет локальным. Таким образом, отформатированное время будет только 22:00, если среда имеет то же смещение, что и метка времени (т. е. 8).