使用Luxon将yyyyMMdd转为dd/MM/yyyy时Jest Spectator测试失败求助
问题分析与解决
你的代码核心问题是日期解析格式字符串写错了:
你要解析的输入是yyyyMMdd格式(比如20201130代表2020年11月30日),但调用DateTime.fromFormat时传入的格式是'ddMMyyyy',这会让Luxon把输入字符串按「日-月-年」规则去解析,自然会得到无效日期,导致测试失败。
修正后的代码
把解析格式改成'yyyyMMdd'即可,同时如果需要确保输出是固定的dd/MM/yyyy格式,建议不要依赖toLocaleString(DateTime.DATE_SHORT)(它会受环境区域设置影响,可能输出不同分隔符或格式),而是用toFormat('dd/MM/yyyy')强制指定输出格式:
toDateFormatDDMMYYYY = DateTime.fromFormat( dateFormatToTransform, 'yyyyMMdd' // 修正为输入对应的格式 ).toFormat('dd/MM/yyyy'); // 强制输出目标格式
为什么控制台看起来正常?
大概率是你控制台测试时用的输入刚好符合ddMMyyyy格式(比如输入01072023),所以解析成功,但测试用的20201130按ddMMyyyy解析的话,会把20当作日期、20当作月份,这显然是无效的,因此返回「invalid date」。
测试验证
修正代码后,你的Jest Spectator测试应该能正常通过——输入20201130会被正确解析为2020年11月30日,然后格式化为30/11/2020,与测试预期一致。
内容的提问来源于stack exchange,提问作者Olivier
相关产品推荐
相关产品推荐

