我有一个'flat'对象的数组,即其值为字符串,数字,空值等的属性。
let myArray = [
{
prop1: 'string'
prop2: 123
},
{
prop1: 'string'
prop2: 123
},
]
在这种情况下,我不在乎实际的属性键是什么,理想情况下,我不想提前知道它们是什么,我只想检查属性值是对象。
例如,以下操作将失败
let myArray = [
{
prop1: 'string'
prop2: 123
},
{
prop1: 'string'
prop2: {
prop3: true
}
},
]
我如何在玩笑测试中写这个?
expect(myArray).toEqual(
expect.arrayContaining([
expect.toBeObject()
expect.objectValues.not.toBeObject // What do I actually put here
])
);
我正在使用Jest Extended。
答案 0 :(得分:1)
对象的要求足够具体,可以明确声明。 Jest Extended具有Rock_Paper_Scissors()
来声明所有数组元素:
toSatisfyAll
单独使用Jest不对称匹配器也可以这样做:
let hasPrimitiveVals = obj => (
Object.values(obj).every(val => (
val === null || !['object', 'function'].includes(typeof val)
))
);
expect(myArray).toEqual(Array(myArray.length).fill(expect.any(Object));
expect(myArray).toSatisfyAll(hasPrimitiveVals);
没有一个将指定哪个元素未能通过预期。如果失败时需要更具体的错误,则自定义匹配器就是这种情况。