У меня проблема с часовыми поясами при тестировании моего приложения Angular. Например, в моем компоненте Angular у меня есть следующий метод, который принимает некоторые аргументы и возвращает переведенную строку или дату, отформатированную с помощью Angular Pipe
public testStatus(isTestDue: boolean, lastTestDate: any): string {
if (isTestDue || lastTestDate < 1000 || !lastTestDate) {
return this.i18Next.transform('ns.common:test.required');
} else if (lastTestDate > 1000) {
return this.datePipe.transform(lastBumpDate, 'medium');
}
}
Теперь я пишу тест для метода, как это так
describe('testStatus', () => {
fit('should return "Jan 1, 1970, 1:00:12 AM"', () => {
expect(component.testStatus(false, 12345)).toBe('Jan 1, 1970, 1:00:12 AM');
});
});
Теперь это работает, когда я запускаю свои тесты локально (мой часовой пояс - центральноевропейское стандартное время). Однако, когда мое приложение построено на сервере Bamboo, я получаю сообщение об ошибке:
Ожидается, что «1 января 1970 г., 12:00:12» будет «1 января 1970 г., 1:00:12»
Похоже, что Bamboo Server использует «Всемирное координированное время» (это я проверил, записав new Date()
в консоль). Поэтому я подумал, что я попытаюсь изменить часовой пояс в моем тесте, чтобы он работал локально и на внешнем сервере сборки. Таким образом, я изменил свой код, поэтому для установки часового пояса использую momentJS и jasmin.clock()
...
describe('testStatus', () => {
beforeEach(() => {
jasmine.clock().uninstall();
jasmine.clock().install();
});
afterEach(() => {
jasmine.clock().uninstall();
});
fit('should return "Jan 1, 1970, 1:00:12 AM"', () => {
jasmine.clock().mockDate(moment.tz('Europe/Berlin').format());
expect(component.testStatus(false, 12345)).toBe('Jan 1, 1970, 1:00:12 AM');
});
});
Когда экспериментировал с часовыми поясами и пытался заставить тест провалиться локально (установив на moment.tz('Europe/London')
, я понял, что часовой пояс не изменяется локально или удаленно. Может кто-нибудь помочь мне определить, как я могу установить дату на использовать Всемирное координированное время или определенный часовой пояс? Или я неправильно подхожу к этому тесту? Любой совет приветствуется.