Javascript Jest预期对象属性值不是对象
我有一个“平面”对象数组,即值为字符串、数字、null等的属性Javascript Jest预期对象属性值不是对象,javascript,testing,jestjs,Javascript,Testing,Jestjs,我有一个“平面”对象数组,即值为字符串、数字、null等的属性 let myArray = [ { prop1: 'string' prop2: 123 }, { prop1: 'string' prop2: 123 }, ] 在这种情况下,我不关心实际的属性键是什么,理想情况下,我不想事先知道它们是什么,我只想检查属性值是否为对象 例如,以下操作将失败 let myArray = [ {
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。对象的需求非常具体,可以明确地断言。Jest Extended使用
toSatisfyAll
断言所有数组元素:
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);
单独使用Jest不对称匹配器也可以做到这一点:
expect(myArray).toEqual(Array(myArray.length).fill({ asymmetricMatch: hasPrimitiveVals }));
它们都不会指定哪个元素未达到预期。如果失败时需要更具体的错误,自定义匹配器就是这种情况