You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试Date.getTime()的类型?Jest测试失败问题解决

解决Date.getTime()返回值的Jest类型测试问题

先帮你理清代码里的几个关键点,再给出正确的测试方案:

为什么你的代码会出现这些输出?

  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:35:16