node-tdd
Version:
Drop in extension for mocha to abstract commonly used test setups
23 lines (21 loc) • 826 B
JavaScript
import objectScan from 'object-scan';
export default (input, modifiers) => {
objectScan(['**'], {
filterFn: ({ key, value, parent }) => {
const k = key[key.length - 1];
if (typeof k === 'string' && k.includes('|')) {
const [newKey, ...modifierNames] = k.split('|');
const unknownModifiers = modifierNames
.filter((n) => typeof modifiers[n] !== 'function');
if (unknownModifiers.length !== 0) {
throw new Error(`Unknown Modifier(s) detected: ${unknownModifiers.join(', ')}`);
}
// eslint-disable-next-line no-param-reassign
delete parent[k];
// eslint-disable-next-line no-param-reassign
parent[newKey] = modifierNames
.reduce((p, modifierName) => modifiers[modifierName](p), value);
}
}
})(input);
};