如何测试Date.getTime()的类型?Jest测试失败问题解决
解决Date.getTime()返回值的Jest类型测试问题
先帮你理清代码里的几个关键点,再给出正确的测试方案:
为什么你的代码会出现这些输出?
date1.getTime()返回的是原始类型的number值(比如1515841200000),所以:typeof date1.getTime()返回字符串"number",这是原始数字类型的正确标识typeof date1.getTime() === Number返回false,因为Number是构造函数(一个对象类型的值),而typeof返回的是字符串,两者类型完全不同,自然不相等typeof date1.getTime() === number报错,因为number不是合法的变量名,你需要用字符串字面量"number"来做类型比较
为什么Jest的expect.any(Number)会失败?
expect.any(Number)的作用是检查值是否是Number构造函数创建的实例,但原始类型的number值并不是Number的实例(只有用new Number(xxx)创建的包装对象才会是Number的实例)。而Date.getTime()返回的是原始数字,所以这个匹配器自然会失败。
正确的测试方式
你可以选择以下几种方案来准确测试这个值的类型:
方案1:用typeof结合toBe匹配器
直接检查值的typeof结果是否为字符串"number":
const timestamp = date1.getTime(); expect(typeof timestamp).toBe('number');
方案2:使用Jest的toBeNumber()匹配器
如果你的Jest版本在23及以上(默认包含该匹配器),可以用更直观的数字类型匹配器:
const timestamp = date1.getTime(); expect(timestamp).toBeNumber();
方案3:额外排除NaN的情况
如果需要确保值不是NaN(因为NaN的typeof也会返回"number"),可以加一层判断:
const timestamp = date1.getTime(); expect(typeof timestamp).toBe('number'); expect(Number.isNaN(timestamp)).toBe(false);
这样就能准确测试Date.getTime()返回值的类型了。
内容的提问来源于stack exchange,提问作者bsky
相关产品推荐
相关产品推荐

