我有一个表单,用户可以在其中输入日期,即<input type="date">
以yyyy-MM-dd
格式提交值。当我使用字符串创建Date对象时,它假定时区是用户浏览器设置的时区——这是我想要的行为。
然后,我使用日期值对需要 ISO 日期/时间字符串的 REST API 进行查询。这没问题,因为Date对象toISOString
上的函数可以正确处理所有内容。
但是,当我对这段代码进行单元测试时——将我的输入设置为yyyy-MM-dd
字符串,然后断言输出是预期的 ISO 时间戳字符串,测试只能在特定时区工作。有没有办法可以在测试中强制时区?
我尝试使用 Jasmine 间谍来执行以下操作:
var fixedTime = moment().zone(60).toDate()
spyOn(window, 'Date').andCallFake(function() {
return fixedTime;
});
但是鉴于构造函数的变体如此之多,并且它被 moment.js 调用的方式如此之多,这是非常不切实际的,并且让我陷入了无限循环。