我正在尝试在 Angular 中测试一个服务函数,它接收一个日期并检查该日期是否是未来的日期。如果是,则返回 true。
// The 'check_date' will always be in the format `dd/mm/yyyy`
public checkDate(check_date: string): boolean {
const today: any = new Date();
const dateParts: any = check_date.split('/');
const dateObject: any = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
if (dateObject.getTime() > today.getTime()) {
return true;
}
return false;
}
我该如何测试呢?因为如果我这样做:
it('should return true if date is in the future', () => {
const date = '04/02/2018';
const result = service.checkDate(date);
expect(result).toBeTruthy();
});
今天它会过去,因为 new Date()
将是 01/02/2018
。但是如果我下个月运行这个测试,它不会通过。
我可以将要测试的日期设置得更远,例如 01/01/3018
。但我想知道是否有另一种方法来测试这种情况。
原文由 celsomtrindade 发布,翻译遵循 CC BY-SA 4.0 许可协议
Date
可以模拟以明确测试它应该返回的值:或者,Jasmine Clock API 可用于模拟日期:
由于
Date
不是间谍,测试不会像Date
调用可以断言的那样严格。