开玩笑:如何测试可选对象键

Shi*_*ang 6 javascript jestjs

比如说,我下面有一个对象

const obj1 = {名称:expect.any(String)}

后端返回响应如下,对象键“age”作为可选键

const 响应 = {名称:'bbb',年龄:10}

那么,如何断言 obj1 将age作为可选键,这意味着如果它存在,它必须是数字类型,如果它不存在,我们可以省略检查?

期望(响应).toMatchObject(obj1);

ehr*_*ona 5

我不认为有一个内置函数可以做到这一点,但是toMatchObject和解构可以满足您的需要:

expect({
  age: 0, 
  ...response
}).toMatchObject(obj1);
Run Code Online (Sandbox Code Playgroud)

如果age对象中不存在,则假定为 0;如果存在,它将使用当前值,因此如果类型错误,则会失败。


Hus*_*bar -4

据我所知,您想检查属性是否已定义,检查其类型是否为数字?如果该属性不存在,则不检查属性类型?正确的?

假设上面的理解是正确的,应该这样做:

        const response = {name: "bbb", age:10};
        if (response.age) {
            if (typeof response.age === 'number') {
            console.log("age is a number");
            //your logic if age is a number
            }
            else {
            //your logic in case age exists but its not a number
            }
        }
        else {
        //your logic in case age does not exist
        }
Run Code Online (Sandbox Code Playgroud)

  • 这个问题是专门关于笑话的,所以一个好的答案是指特定的笑话解决方案 (3认同)