Я пишу тесты для функции и сталкиваюсь с проблемой. Я могу беспорядочно добиться того, чего хочу, но хочу сделать его немного более динамичным c.
Например, если у меня есть,
import { mapValues, isObject, forIn } from 'lodash';
const trimText = field => typeof field === 'string' ? field.replace(/^\s+|\s+$/g, '') : field;
const trimFields: any = data => mapValues(data, (element, k) => isObject(element) ? trimFields(element) : trimText(element));
const simpleObject = {
fieldA: [' simple trim ', 'simple trim'],
fieldB: [' new\n line trim ', 'new\n line trim'],
fieldC: [' \n\ts\n\t\n ', 's']
};
Я могу написать тест для это как,
describe('Simple object /', () => {
const objectToTrim: any = {};
forIn(simpleObject, ([raw], key) => {
objectToTrim[key] = raw;
});
const trimmedObject = trimFields(objectToTrim);
forIn(trimmedObject, (value, key) => {
it(`Should have properly trimmed ${value} into ${simpleObject[key][1]}`, () => {
expect(value).toEqual(simpleObject[key][1]);
});
});
});
Но теперь я столкнулся с проблемой со сложным объектом. Например, если у меня есть:
const complexObject: any = {
fieldA: [
{ subfieldA: ' simple trim ' },
'simple trim'
],
fieldB: [
{
subfieldB: {
subSubFieldB: ' new\n line trim '
}
},
'new\n line trim'
],
fieldC: [
{
subfieldC: {
subSubFieldC: {
subSubSubfieldC: ' \n\ts\n\t\n '
}
}
},
's'
]
};
Я не уверен, как это проверить. Есть ли способ написать тест так же, как для простого объекта, но как-то найти вложенное значение? Например, с помощью loda sh (потому что я все равно уже использую это), можно ли найти subSubSubfieldC
в fieldC
и затем сравнить его с complexObject[key][1]
, как я сделал в expect(...)
с simpleObject[key][1]