如何动态测试对象内的typeof数组?

时间:2019-04-22 09:08:18

标签: javascript node.js mocha chai should.js

我有一个用户对象-我想为每个用户属性生成测试,并检查其类型是否正确。但是,由于typeof数组是对数组属性的对象断言失败,带有“ AssertionError:期望[1]是对象”。

因此,我检查了该属性是否为数组,然后为其生成了特殊测试。我想知道这是否是正确的方法?我感觉自己想念一些明显的东西。

Object.keys(pureUser).forEach(property =>{
    // since typeof array is an object we need to check this case separately or test will fail with expecting array to be an object
    if (Array.isArray(pureUser[property])) {
         it(`should have property ${property}, type: array`, function () {
             user.should.have.property(property);
           });
         } else {
             it(`should have property ${property}, type: ${(typeof pureUser[property])}`, function () {
                 user.should.have.property(property);
                 user[property].should.be.a(typeof pureUser[property]);
             });
         }
    });

pureUser是这样的:

let pureUser = {
    username: "JohnDoe123",
    id: 1,
    categories: [1,2,3,4]
}

用户变量是通过got.js在其他位置定义的

1 个答案:

答案 0 :(得分:0)

将测试更改为pureUser[property].should.be.an.Arrayuser[property].should.be.an.Array

forEach

  

forEach()方法为数组中的每个元素依次调用提供的函数。

let pureUser = {
username: "JohnDoe123",
id: 1,
categories: [1,2,3,4]
}

Object.keys(pureUser).forEach(property =>{

        // since typeof array is an object we need to check this case separately or test will fail with expecting array to be an object
        if (Array.isArray(pureUser[property])) {
        
            console.log('Yes, it\'s an Array')
            //it(`should have property ${property}, type: array`, function () {
            //    user.should.have.property(property);
            //});
        } else {
            console.log('No, it\'s not an Array')
            //it(`should have property ${property}, type: ${(typeof property)}`, function () {
                //user.should.have.property(property);
               // user[property].should.be.a(typeof pureUser[property]);
            //});
        }

    });

在pureUser上使用forEach时,参数将是对象属性,例如usernameid

let pureUser = {
username: "JohnDoe123",
id: 1,
categories: [1,2,3,4]
}

Object.keys(pureUser).forEach(property =>{
  console.log(property);
});

您还可以在forEach函数中访问该数组。

arr.forEach(item, index, arr)