Skip to content
22 changes: 22 additions & 0 deletions packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -1996,6 +1996,28 @@ Expected: <green>{\\"a\\": 99}</>
Received: <red>{\\"a\\": 99}</>"
`;

exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).not.toEqual({"nodeName": "div", "nodeType": 1}) 1`] = `
"<dim>expect(</><red>received</><dim>).</>not<dim>.toEqual(</><green>expected</><dim>)</>

Expected: <green>{\\"nodeName\\": \\"div\\", \\"nodeType\\": 1}</>
Received: <red>{\\"nodeName\\": \\"div\\", \\"nodeType\\": 1}</>"
`;

exports[`.toEqual() {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) 1`] = `
"<dim>expect(</><red>received</><dim>).toEqual(</><green>expected</><dim>)</>

Difference:

<green>- Expected</>
<red>+ Received</>

<dim> Object {</>
<green>- \\"nodeName\\": \\"p\\",</>
<red>+ \\"nodeName\\": \\"div\\",</>
<dim> \\"nodeType\\": 1,</>
<dim> }</>"
`;

exports[`.toEqual() {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) 1`] = `
"<dim>expect(</><red>received</><dim>).toEqual(</><green>expected</><dim>)</>

Expand Down
20 changes: 20 additions & 0 deletions packages/expect/src/__tests__/matchers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
30 changes: 6 additions & 24 deletions packages/expect/src/jasmineUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand Down