Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest预期对象属性值不是对象_Javascript_Testing_Jestjs - Fatal编程技术网

Javascript Jest预期对象属性值不是对象

Javascript Jest预期对象属性值不是对象,javascript,testing,jestjs,Javascript,Testing,Jestjs,我有一个“平面”对象数组,即值为字符串、数字、null等的属性 let myArray = [ { prop1: 'string' prop2: 123 }, { prop1: 'string' prop2: 123 }, ] 在这种情况下,我不关心实际的属性键是什么,理想情况下,我不想事先知道它们是什么,我只想检查属性值是否为对象 例如,以下操作将失败 let myArray = [ {

我有一个“平面”对象数组,即值为字符串、数字、null等的属性

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 }));
它们都不会指定哪个元素未达到预期。如果失败时需要更具体的错误,自定义匹配器就是这种情况