测试Angular应用时,TimeZones出现问题。例如,在我的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服务器上构建时,出现错误:
预计“ 1970年1月1日,凌晨12:00:12”为“ 1970年1月1日,凌晨1:00:12”
Bamboo服务器似乎正在使用“协调世界时”(即我通过向控制台写入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')
,我已经意识到时区并未在本地或远程更改。有人可以帮助我确定如何设置时区吗?使用协调世界时或特定时区的日期?或者我未正确地进行此测试?任何建议,我们都会感激不尽。