Как мне установить часовой пояс в моей конфигурации Jest в *Windows 10 *? - PullRequest
0 голосов
/ 23 апреля 2020

Этот вопрос похож на Как мне установить часовой пояс в моей конфигурации Jest? , но все ответы там относятся к * nix.

Как установить часовой пояс для тестов Jest при работе Windows 10?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

OK! Спасибо за комментарии и ответы. Это подтолкнуло меня в правильном направлении.

set-tz это круто, но функция cleanup() не выполнялась после завершения тестов.
Это, в сочетании с tzutil изменением системного времени Windows, заставило меня задуматься о минимизации влияние изменения часового пояса и возможность вернуться к force вместо того, чтобы полагаться на слушателя выхода.

Итак, вот где он приземлился.

// setTimezone file.

const { execSync } = require('child_process');
const os = require('os');

export const setTimezone = (TZ) => {
  if (os.platform() === 'win32') {
    process.env.STORED_TZ = execSync('tzutil /g').toString();
    execSync(`tzutil /s "${TZ}"`);
    console.warn(`Windows timezone changed from "${process.env.STORED_TZ}" to "${TZ}"\nRun \`tzutil /s "${process.env.STORED_TZ}"\` to set it back manually.`);
  } else {
    process.env.TZ = TZ;
  }
};

export const restoreTimezone = () => {
  if (os.platform() === 'win32') {
    execSync(`tzutil /s "${process.env.STORED_TZ}"`);
    console.warn(`Windows timezone restored to "${process.env.STORED_TZ}"`);
  } else {
    process.env.TZ = process.env.STORED_TZ;
  }
};

Вот пример того, где мы его используем.

// test file

import * as dtt from './dateTimeTools';
import typeOf from './funcs/typeOf';
import { restoreTimezone, setTimezone } from './setTimezone';

const inputs = {
  dateOnly: '2020-01-01',
  dateTimeWithoutTimezone: '2020-01-01T00:00:00.000000',
  midnightNewYorkTimezone: '2020-01-01T00:00:00.000000-05:00',
};

describe('dateTimeTools > isoToDate', () => {
  setTimezone('Pacific Standard Time'); // ?

  assert({
    given: 'any valid ISO string.',
    should: 'return a date object.',
    actual: typeOf(dtt.isoToDate(inputs.dateOnly)),
    expected: 'date',
  });

  assert({
    given: 'a date-only ISO string.',
    should: 'return the given date at midnight in the local timezone.',
    actual: dtt.isoToDate(inputs.dateOnly).toString(),
    expected: 'Wed Jan 01 2020 00:00:00 GMT-0800 (Pacific Standard Time)',
  });

  restoreTimezone(); // ?
});

И вывод. test console output

0 голосов
/ 23 апреля 2020

Полагаю, вы можете решить эту проблему, используя пакет set-tz

const setTZ = require('set-tz')
setTZ('America/New_York')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...