Ext JS单元测试中如何正确用日期格式化验证dateAdd方法?
解决ExtJS dateAdd方法单元测试的日期格式化断言问题
看起来你在ExtJS单元测试里踩了个常见的日期处理坑——搞混了Ext.Date.format和Ext.Date.parse的用途,这也是你得到Invalid Date的根本原因!我来一步步帮你修正测试代码,同时满足“不修改原方法”的要求。
问题根源
你现在的测试代码里,用Ext.Date.format('01.01.2018', 'd.m.Y')来创建Date对象,但Ext.Date.format的作用是把已有的Date对象转换成指定格式的字符串,反过来要把字符串解析成Date对象,必须用Ext.Date.parse方法。
修正后的测试代码
下面是调整后的测试逻辑,重点是先正确解析输入日期,再格式化输出结果做断言:
t.describe('dateAdd() method', function(t) { t.it('should increment the given date by 1 day', function(t) { // 1. 用Ext.Date.parse把字符串解析为有效的Date对象 const inputDate = Ext.Date.parse('01.01.2018', 'd.m.Y'); // 2. 调用待测试的dateAdd方法 const resultDate = MyApp.dateAdd(inputDate, Ext.Date.DAY, 1); // 3. 把返回的Date对象格式化为d.m.Y字符串,再和预期值断言 t.expect(Ext.Date.format(resultDate, 'd.m.Y')).toBe('02.01.2018'); }); });
核心要点解释
- 解析字符串到Date:
Ext.Date.parse(日期字符串, 格式模板)是ExtJS专门用来将字符串转换为Date对象的方法,这一步能确保你传入dateAdd的是一个有效的日期,而不是无效值。 - 格式化结果做断言:因为
dateAdd返回的是Date对象,直接和字符串对比肯定会失败,所以必须用Ext.Date.format把结果转换成你需要的d.m.Y格式,再和预期的字符串进行匹配。 - 不修改原方法:整个调整只针对测试代码,完全符合你“不允许修改原方法”的要求。
可选优化:复用格式常量
如果后续需要修改日期格式或者有多个测试用例,可以把格式字符串抽成常量,让代码更易维护:
const TEST_DATE_FORMAT = 'd.m.Y'; t.describe('dateAdd() method', function(t) { t.it('should increment the given date by 1 day', function(t) { const inputDate = Ext.Date.parse('01.01.2018', TEST_DATE_FORMAT); const resultDate = MyApp.dateAdd(inputDate, Ext.Date.DAY, 1); t.expect(Ext.Date.format(resultDate, TEST_DATE_FORMAT)).toBe('02.01.2018'); }); });
这样不管后续格式怎么变,只需要修改一处常量即可。
内容的提问来源于stack exchange,提问作者Nuri Engin
相关产品推荐
相关产品推荐

