From 300bfe26f253b8f045da24bf3c75a83d1cc0f49c Mon Sep 17 00:00:00 2001 From: Juan Carlos Medina Date: Sun, 7 Mar 2021 02:41:16 -0800 Subject: [PATCH] feat: Improve error message when passing an Array while a single Element is expected (#906) --- src/__tests__/helpers.js | 5 +++++ src/helpers.js | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/__tests__/helpers.js b/src/__tests__/helpers.js index 8e5d436f..9749a090 100644 --- a/src/__tests__/helpers.js +++ b/src/__tests__/helpers.js @@ -17,6 +17,11 @@ describe('window retrieval throws when given something other than a node', () => `"It looks like you passed a Promise object instead of a DOM node. Did you do something like \`fireEvent.click(screen.findBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`, or await the findBy query \`fireEvent.click(await screen.findBy...\`?"`, ) }) + test('Array as node', () => { + expect(() => getWindowFromNode([])).toThrowErrorMatchingInlineSnapshot( + `"It looks like you passed an Array instead of a DOM node. Did you do something like \`fireEvent.click(screen.getAllBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`?"`, + ) + }) test('unknown as node', () => { expect(() => getWindowFromNode({})).toThrowErrorMatchingInlineSnapshot( `"Unable to find the \\"window\\" object for the given node. Please file an issue with the code that's causing you to see this error: https://github.com/testing-library/dom-testing-library/issues/new"`, diff --git a/src/helpers.js b/src/helpers.js index 176b606f..7634bf9d 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -92,6 +92,10 @@ function getWindowFromNode(node) { throw new Error( `It looks like you passed a Promise object instead of a DOM node. Did you do something like \`fireEvent.click(screen.findBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`, or await the findBy query \`fireEvent.click(await screen.findBy...\`?`, ) + } else if (Array.isArray(node)) { + throw new Error( + `It looks like you passed an Array instead of a DOM node. Did you do something like \`fireEvent.click(screen.getAllBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`?`, + ) } else { // The user passed something unusual to a calling function throw new Error(