diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index d576cdbad479..19d8645061d3 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -1996,6 +1996,28 @@ Expected: {\\"a\\": 99} Received: {\\"a\\": 99}" `; +exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).not.toEqual({"nodeName": "div", "nodeType": 1}) 1`] = ` +"expect(received).not.toEqual(expected) + +Expected: {\\"nodeName\\": \\"div\\", \\"nodeType\\": 1} +Received: {\\"nodeName\\": \\"div\\", \\"nodeType\\": 1}" +`; + +exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) 1`] = ` +"expect(received).toEqual(expected) + +Difference: + +- Expected ++ Received + + Object { +- \\"nodeName\\": \\"p\\", ++ \\"nodeName\\": \\"div\\", + \\"nodeType\\": 1, + }" +`; + exports[`.toEqual() {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) 1`] = ` "expect(received).toEqual(expected) diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index 4e2cf535b6b3..4be1e90b0ac8 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -417,6 +417,16 @@ describe('.toEqual()', () => { }, }, ], + [ + { + nodeName: 'div', + nodeType: 1, + }, + { + nodeName: 'p', + nodeType: 1, + }, + ], ].forEach(([a, b]) => { test(`{pass: false} expect(${stringify(a)}).toEqual(${stringify( b, @@ -537,6 +547,16 @@ describe('.toEqual()', () => { }, }, ], + [ + { + nodeName: 'div', + nodeType: 1, + }, + { + nodeName: 'div', + nodeType: 1, + }, + ], ].forEach(([a, b]) => { test(`{pass: false} expect(${stringify(a)}).not.toEqual(${stringify( b, diff --git a/packages/expect/src/jasmineUtils.ts b/packages/expect/src/jasmineUtils.ts index 11e368d11001..d87bd502daec 100644 --- a/packages/expect/src/jasmineUtils.ts +++ b/packages/expect/src/jasmineUtils.ts @@ -129,24 +129,9 @@ function eq( var aIsDomNode = isDomNode(a); var bIsDomNode = isDomNode(b); - if (aIsDomNode && bIsDomNode) { - // At first try to use DOM3 method isEqualNode - if (a.isEqualNode) { - return a.isEqualNode(b); - } - // IE8 doesn't support isEqualNode, try to use outerHTML && innerText - var aIsElement = a instanceof Element; - var bIsElement = b instanceof Element; - if (aIsElement && bIsElement) { - return a.outerHTML == b.outerHTML; - } - if (aIsElement || bIsElement) { - return false; - } - return a.innerText == b.innerText && a.textContent == b.textContent; - } - if (aIsDomNode || bIsDomNode) { - return false; + // Use DOM3 method isEqualNode (IE>=9) + if (aIsDomNode && typeof a.isEqualNode === 'function' && bIsDomNode) { + return a.isEqualNode(b); } // Assume equality for cyclic structures. The algorithm for detecting cyclic @@ -260,12 +245,9 @@ export function isA(typeName: string, value: unknown) { } function isDomNode(obj: any): obj is Node { - return ( - obj !== null && - typeof obj === 'object' && - typeof obj.nodeType === 'number' && - typeof obj.nodeName === 'string' - ); + // In some test environments (e.g. "node") there is no `Node` even though + // we might be comparing things that look like DOM nodes. + return typeof Node !== 'undefined' && obj instanceof Node; } export function fnNameFor(func: Function) {