使用momentJS更改Jasmin单元测试中的TimeZone

时间:2019-01-22 08:37:14

标签: angular unit-testing jasmine momentjs

测试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'),我已经意识到时区并未在本地或远程更改。有人可以帮助我确定如何设置时区吗?使用协调世界时或特定时区的日期?或者我未正确地进行此测试?任何建议,我们都会感激不尽。

0 个答案:

没有答案