如何使用 Jest 断言数据类型

问题描述 投票:0回答:5

我正在使用 Jest 来测试我的 Node 应用程序。

我是否可以期望/断言一个值是日期对象?

expect(typeof result).toEqual(typeof Date())

是我的尝试,但自然返回[Object]。所以这也会通过 {}。

node.js jestjs
5个回答
199
投票

适用于较新版本的 Jest

> 16.0.0

有一个名为

toBeInstanceOf
的新匹配器。您可以使用匹配器来比较值的实例。

示例:

expect(result).toBeInstanceOf(Date)

适用于 Jest 版本

< 16.0.0

使用

instanceof
证明
result
变量是否为
Date
对象。

示例:

expect(result instanceof Date).toBe(true)

另一个匹配常见类型的例子:

boolean

expect(typeof target).toBe("boolean")

number

expect(typeof target).toBe("number")

string

expect(typeof target).toBe("string")

array

expect(Array.isArray(target)).toBe(true)

object

expect(target && typeof target === 'object').toBe(true)

null

expect(target === null).toBe(true)

undefined

expect(target === undefined).toBe(true)

function

expect(typeof target).toBe('function')

Promise
async function

expect(!!target && typeof target.then === 'function').toBe(true)

匹配更多类型的另一个示例:

float
十进制数。即
3.14
137.03

expect(Number(target) === target && target % 1 !== 0).toBe(true)

Promise
async function
返回
Error

await expect(asyncFunction()).rejects.toThrow(errorMessage)

参考资料:


11
投票

接受的答案有效,但容易出现拼写错误。特别是对于原始类型

// This won't work. Misspelled 'string'
expect(typeof target).toBe("strng")

我在文档中偶然发现的一个更好的方法(没有明确定义为测试类型的方法)是:

expect(id).toEqual(expect.any(Number))
expect(title).toEqual(expect.any(String))
expect(feature).toEqual(expect.any(Boolean))
expect(date).toEqual(expect.any(Date))

6
投票

Jest 支持

toBeInstanceOf
。 请参阅他们的文档,但以下是他们在回答此问题时所拥有的内容:

class A {}

expect(new A()).toBeInstanceOf(A);
expect(() => {}).toBeInstanceOf(Function);
expect(new A()).toBeInstanceOf(Function); // throws

4
投票

检查数据类型的另一种方法是定义一个函数并将包含要检查的属性的对象传递给它。

使用类似的方法,如@Mazen Sharkawy的答案:

const validateDatatypes = ({ objToValidate }) => {
    expect(objToValidate).toEqual({
    property1: expect.any(String),
    property2: expect.any(Number),
    property2: expect.any(Date),
    // Every other check you need ...
  });
};

0
投票

如果您正在处理 JSX,您可以执行以下操作

expect(result.type).toBe(MyComponent);

示例

component = shallow(<MyWidget {...prop} />);

instance = component.instance();
const result = instance.myMethod();

expect(result.type).toBe(MyComponent);

在此示例中

myMethod()
返回
MyComponent
,我们正在测试它。

© www.soinside.com 2019 - 2024. All rights reserved.