开玩笑地定义多个属性

时间:2020-06-07 12:35:22

标签: reactjs jestjs

有没有一种方法可以检查笑话测试中要定义的多个属性。

现在正在做,

expect(a.startTime).toBeDefined();
expect(a.userId).toBeDefined();
expect(a.loaded).toBeDefined();
expect(a.session).toBeDefined();
expect(a.version).toBeDefined();

可以将这些组合成单行期望吗?

我将测试写为expect(a.startTime && a.userId && a.loaded)....toBeDefined();

但是评论者拒绝了它,因为&&可能无法以正确的方式测试其存在,而恰恰没有说明未定义哪个属性。

1 个答案:

答案 0 :(得分:1)

我建议定义a的形状(以下是假设,因此您需要根据需要进行调整):

expect(a).toEqual(
  expect.objectContaining({
    startTime: expect.any(Date),
    userId: expect.any(String),
    loaded: expect.any(Boolean),
    session: expect.objectContaining({ ... }),
    version: expect.any(Number)
  })
);

expect.any

expect.objectContaining(使用它可以与某些属性匹配,而忽略其他属性;但是,如果要与对象及其所有属性匹配,则只需使用:{ })< / p>

以上是通过声明属性的数据类型来匹配属性的一般方法。您还可以使用实数:字符串,对象,布尔值,数字等进行匹配。避免使用toBeDefined(),因为它对定义的内容(数字,布尔值,字符串或函数?)不是很特定。