`toBeInstanceOf(Number)` 不能开玩笑

Posted

技术标签:

【中文标题】`toBeInstanceOf(Number)` 不能开玩笑【英文标题】:`toBeInstanceOf(Number)` does not work in jest 【发布时间】:2019-03-04 04:44:46 【问题描述】:

我有一个测试如下:

expect(result.data.quota).toBeInstanceOf(Number);

此测试失败,出现一个奇怪的错误,指出预期的数字和收到的数字:

 expect(value).toBeInstanceOf(constructor)

    Expected constructor: Number
    Received constructor: Number
    Received value: 2000

【问题讨论】:

【参考方案1】:

以下适用于所有构造函数:

expect(value).toEqual(expect.any(Number));

【讨论】:

【参考方案2】:

期望(值).not.toBeNaN();

编辑:我会选择@bszoms 解决方案:

expect(typeof value).toBe('number')

【讨论】:

这是错误的。例如,False 不是 NaN,也不是数字。 这个答案必须明确避免。这将使您的 ANYTHING 测试成功,但 NaN 除外。 false, "some string", true, Promise, ReactComponent 你的名字【参考方案3】:

您也可以这样做:expect(typeof <value>).toBe('number')

或者您可以使用jest-extended,它添加了包括toBeNumber在内的一系列匹配器。

均由讨论here提供。

【讨论】:

【参考方案4】:

按照@stephan 的说法,这适用于基于异步/承诺的方法:

await expect(asyncFunction()).resolves.toEqual(expect.any(Number));

【讨论】:

以上是关于`toBeInstanceOf(Number)` 不能开玩笑的主要内容,如果未能解决你的问题,请参考以下文章

number - Number.isInteger()

js中为啥NaN的返回类型为number

Oracle 中的“NUMBER”和“NUMBER(*,0)”是不是相同?

集合 set方法

Number 的扩展

(number & -number) 在位编程中是啥意思? [复制]