我有一个用户对象-我想为每个用户属性生成测试,并检查其类型是否正确。但是,由于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在其他位置定义的
答案 0 :(得分:0)
将测试更改为pureUser[property].should.be.an.Array
或user[property].should.be.an.Array
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时,参数将是对象属性,例如username
,id
等
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)