dom-compare icon indicating copy to clipboard operation
dom-compare copied to clipboard

Comparing attributes gives 'nodeType is unexpected' error

Open jasny opened this issue 8 years ago • 1 comments
trafficstars

When comparing attributes, I get the error

Error: nodeValue is not equal, but nodeType is unexpected
    at Collector.collectFailure (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/collector.js:113:34)
    at Comparator._compareAttributes (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:74:36)
    at Comparator.compareNode (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:108:28)
    at Comparator._compareNodeList (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:36:23)
    at Comparator.compareNode (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:109:27)
    at Comparator._compareNodeList (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:36:23)
    at Comparator.compareNode (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:109:27)
    at Comparator.compareNode (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:106:28)
    at module.exports (/home/arnold/Projects/legalthings/legalform-js/node_modules/dom-compare/lib/compare.js:137:18)
    at Object.<anonymous> (/home/arnold/Projects/legalthings/legalform-js/dom-compare-tests.js:10:14)
var compare = require('dom-compare').compare;
var jsdom = require('jsdom');

// Those are the HTML fragments that we want to compare:
var expectedHTML = '<div class="foo"></div>';
var actualHTML = '<div class="bar"></div>';

var expectedDOM = jsdom.jsdom(expectedHTML);
var actualDOM = jsdom.jsdom(actualHTML);
var result = compare(expectedDOM, actualDOM);

console.log('diff array:', result.getDifferences());

I've dumped the actual and expected variables in collector.js and noticed they don't seem to have any properties.

console.log(expected, actual, vExpected, vActual);

yields

Attr {} Attr {} 'foo' 'bar'

jasny avatar Feb 14 '17 20:02 jasny

that's a bug in jsdom. Attr is not inherting Node and thus they don't have nodeType. we can add a quickfix that if nodeType is undefined will compare classes.

chiptus avatar Apr 26 '17 07:04 chiptus