From f8365c63cf023f41e0a7fe70e5305e219648cd5f Mon Sep 17 00:00:00 2001 From: pikou <434708082@qq.com> Date: Sat, 13 Mar 2021 17:33:21 +0800 Subject: [PATCH 1/3] fix(pretty-format): handles jsdom attributes properly --- .../pretty-format/src/__tests__/DOMElement.test.ts | 5 +++++ packages/pretty-format/src/plugins/DOMElement.ts | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/pretty-format/src/__tests__/DOMElement.test.ts b/packages/pretty-format/src/__tests__/DOMElement.test.ts index 8c86488ebf0e..6a39f2576512 100644 --- a/packages/pretty-format/src/__tests__/DOMElement.test.ts +++ b/packages/pretty-format/src/__tests__/DOMElement.test.ts @@ -582,4 +582,9 @@ Testing.`; ].join('\n'), ); }); + + it('handles jsdom attributes properly', () => { + const attributes = require('jsdom/lib/jsdom/living/attributes'); + expect(DOMElement.test(attributes)).toBe(false); + }); }); diff --git a/packages/pretty-format/src/plugins/DOMElement.ts b/packages/pretty-format/src/plugins/DOMElement.ts index e500620dd5d0..797337ccfef4 100644 --- a/packages/pretty-format/src/plugins/DOMElement.ts +++ b/packages/pretty-format/src/plugins/DOMElement.ts @@ -22,12 +22,20 @@ const FRAGMENT_NODE = 11; const ELEMENT_REGEXP = /^((HTML|SVG)\w*)?Element$/; +const testHasAttribute = (val: any) => { + try { + return typeof val.hasAttribute === 'function' && val.hasAttribute('is'); + } catch (_) { + return false; + } +}; + const testNode = (val: any) => { const constructorName = val.constructor.name; const {nodeType, tagName} = val; const isCustomElement = (typeof tagName === 'string' && tagName.includes('-')) || - (typeof val.hasAttribute === 'function' && val.hasAttribute('is')); + testHasAttribute(val); return ( (nodeType === ELEMENT_NODE && From a05a0201fe192e0fb1ab370188ea471a08743bb4 Mon Sep 17 00:00:00 2001 From: pikou <434708082@qq.com> Date: Sat, 13 Mar 2021 18:49:59 +0800 Subject: [PATCH 2/3] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f6c31fb0d4a..8db6c9c6ebbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ - `[jest-worker]` Handle `ERR_IPC_CHANNEL_CLOSED` errors properly ([#11143](https://github.com/facebook/jest/pull/11143)) - `[pretty-format]` [**BREAKING**] Convert to ES Modules ([#10515](https://github.com/facebook/jest/pull/10515)) - `[pretty-format]` Only call `hasAttribute` if it's a function ([#11000](https://github.com/facebook/jest/pull/11000)) +- `[pretty-format]` Handle jsdom attributes properly ([#11189](https://github.com/facebook/jest/pull/11189)) ### Chore & Maintenance From d9eee8231b2e2a269438a124b3ddaa5f7586ecdb Mon Sep 17 00:00:00 2001 From: pikou <434708082@qq.com> Date: Sat, 13 Mar 2021 20:58:15 +0800 Subject: [PATCH 3/3] Update packages/pretty-format/src/plugins/DOMElement.ts Co-authored-by: Simen Bekkhus --- packages/pretty-format/src/plugins/DOMElement.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pretty-format/src/plugins/DOMElement.ts b/packages/pretty-format/src/plugins/DOMElement.ts index 797337ccfef4..0b2e81653d3a 100644 --- a/packages/pretty-format/src/plugins/DOMElement.ts +++ b/packages/pretty-format/src/plugins/DOMElement.ts @@ -25,7 +25,7 @@ const ELEMENT_REGEXP = /^((HTML|SVG)\w*)?Element$/; const testHasAttribute = (val: any) => { try { return typeof val.hasAttribute === 'function' && val.hasAttribute('is'); - } catch (_) { + } catch { return false; } };