Я пытаюсь написать тест для функции, которая принимает объект и отфильтровывает только те свойства, которые мне нужны, например:
const srcObj = {
singleString: 'this',
extraString: 'what?',
singleNumber: 4,
extraNumber: 0,
singleObject: {
prop: 'this'
},
extraObject: {
nope: 'what is this'
}
};
становится
const expected: Model = {
singleString: 'this',
singleNumber: 4,
singleObject: {
prop: 'this'
}
};
Когда япопробуйте запустить тест
const modelObj = new Model()
const result = filterFunction(srcObj, modelObj)
expect(result).toEqual(expected)
Я получаю сообщение об ошибке
Expected object to be a kind of Object, but was Model({ singleString: 'this', singleNumber: 4, singleObject: Object({ }) }).
Я попытался привести srcObj к Model
в объявлении переменной (что, по-моему, побеждаетцель), приведение обоих объектов к одному и тому же в выражении ожидаемого (то есть expect(result as Model).toEqual(expected as Model)
, и приведение их обоих к any
(expect(result as any).toEqual(expected as any)
)
Я уверен, что есть относительно незначительная вещь, которую яне хватает, чтобы этот тест заработал, но я не уверен, что это такое.
Редактировать
my filterfunction
:
filterFunction(srcObj: any, destObj: any): any {
var lSrcKeys: string[] = Object.keys(srcObj);
var lDestKeys: string[] = Object.keys(destObj);
var lSrcKeyFound: string = '';
var lKeyType: string = '';
var lKeyArrayType: string = '';
lDestKeys.forEach((lDestKey) => {
lSrcKeyFound = '';
lSrcKeys.forEach((lSrcKey) => {
if (lSrcKey.toLowerCase() === lDestKey.toLowerCase()) {
lSrcKeyFound = lSrcKey;
}
});
if (lSrcKeyFound !== '') {
lKeyType = Object.prototype.toString.call(srcObj[lSrcKeyFound]);
if (lKeyType === '[object Array]' && srcObj[lSrcKeyFound].length) {
lKeyArrayType = Object.prototype.toString.call(srcObj[lSrcKeyFound][0]);
if (lKeyArrayType === '[object Object]') {
for (var i = 0; i < srcObj[lSrcKeyFound].length; i++) {
var lSrcArrayItem: any = srcObj[lSrcKeyFound][i];
destObj[lDestKey].push(ModelUtil.filterFunction(lSrcArrayItem, null));
}
} else {
destObj[lDestKey] = srcObj[lSrcKeyFound];
}
} else if (lKeyType === '[object Object]') {
ModelUtil.filterFunction(srcObj[lSrcKeyFound], destObj[lDestKey]);
} else {
destObj[lDestKey] = srcObj[lSrcKeyFound];
}
}
});
return destObj;
}