有没有一种方法可以检查笑话测试中要定义的多个属性。
现在正在做,
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();
但是评论者拒绝了它,因为&&可能无法以正确的方式测试其存在,而恰恰没有说明未定义哪个属性。
答案 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.objectContaining(使用它可以与某些属性匹配,而忽略其他属性;但是,如果要与对象及其所有属性匹配,则只需使用:{ }
)< / p>
以上是通过声明属性的数据类型来匹配属性的一般方法。您还可以使用实数:字符串,对象,布尔值,数字等进行匹配。避免使用toBeDefined()
,因为它对定义的内容(数字,布尔值,字符串或函数?)不是很特定。