UNPKG

jest-preset-angular

Version:

Jest preset configuration for Angular projects

58 lines (57 loc) 2.35 kB
"use strict"; const pretty_format_1 = require("pretty-format"); const jestDOMElementSerializer = pretty_format_1.plugins.DOMElement; const attributesToRemovePatterns = ['ng-reflect', '_nghost', '_ngcontent', 'ng-version']; const attributesToClean = { class: [/^(?:mat|cdk|ng).*-\w*\d+-\d+$/, /^ng-star-inserted$/], id: [/^(?:mat|cdk|ng).*-\d+$/], for: [/^(?:mat|cdk|ng).*-\d+$/], 'aria-owns': [/^(?:mat|cdk|ng).*-\d+$/], 'aria-labelledby': [/^(?:mat|cdk|ng).*-\d+$/], 'aria-controls': [/^(?:mat|cdk|ng).*-\d+$/], }; const hasAttributesToRemove = (attribute) => attributesToRemovePatterns.some((removePattern) => attribute.name.startsWith(removePattern)); const hasAttributesToClean = (attribute) => Object.keys(attributesToClean).some((removePatternKey) => attribute.name === removePatternKey); const removeAngularAttributes = (node) => { const nodeCopy = node.cloneNode(true); Object.values(nodeCopy.attributes) .filter(hasAttributesToRemove) .forEach((attribute) => nodeCopy.attributes.removeNamedItem(attribute.name)); return nodeCopy; }; const cleanAngularClasses = (node) => { const nodeCopy = node.cloneNode(true); Object.values(nodeCopy.attributes) .filter(hasAttributesToClean) .forEach((attribute) => { attribute.value = attribute.value .split(' ') .filter((attrValue) => !attributesToClean[attribute.name].some((attributeCleanRegex) => attributeCleanRegex.test(attrValue))) .join(' '); if (attribute.value === '') { nodeCopy.attributes.removeNamedItem(attribute.name); } else { nodeCopy.attributes.setNamedItem(attribute); } }); return nodeCopy; }; const shouldSerializeElement = (val) => { return Object.values(val.attributes).some((attribute) => hasAttributesToRemove(attribute) || hasAttributesToClean(attribute)); }; const serialize = (node, ...rest) => { let nodeCopy = removeAngularAttributes(node); nodeCopy = cleanAngularClasses(nodeCopy); return jestDOMElementSerializer.serialize(nodeCopy, ...rest); }; const test = (val) => { if (!val || !(val instanceof Element)) { return false; } return jestDOMElementSerializer.test(val) && shouldSerializeElement(val); }; module.exports = { serialize, test, };