From 3a1afceb1789d1e054de947019dfc8fe433c4576 Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Sat, 2 Jun 2018 23:42:09 +0100 Subject: [PATCH] [jest-each] Fix pluralising missing arguments error (#6369) * Add pluralize to missing arguments error * Update changelog * Fix pr links --- CHANGELOG.md | 1 + e2e/__tests__/__snapshots__/each.test.js.snap | 28 +++++++++++++++++-- e2e/each/__tests__/each-exception.test.js | 10 +++++++ packages/jest-each/src/bind.js | 12 ++++++-- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3db507e2e1d..522e3fbd349e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Fixes +- `[jest-each]` Fix pluralising missing arguments error ([#6369](https://github.com/facebook/jest/pull/6369)) - `[jest-each]` Stop test title concatenating extra args ([#6346](https://github.com/facebook/jest/pull/6346)) - `[expect]` toHaveBeenNthCalledWith/nthCalledWith gives wrong call messages if not matched ([#6340](https://github.com/facebook/jest/pull/6340)) - `[jest-each]` Make sure invalid arguments to `each` points back to the user's code ([#6347](https://github.com/facebook/jest/pull/6347)) diff --git a/e2e/__tests__/__snapshots__/each.test.js.snap b/e2e/__tests__/__snapshots__/each.test.js.snap index dbd229a5fb0f..039d3f0f355f 100644 --- a/e2e/__tests__/__snapshots__/each.test.js.snap +++ b/e2e/__tests__/__snapshots__/each.test.js.snap @@ -47,9 +47,10 @@ exports[`runs only the describe.only.each tests 1`] = ` exports[`shows error message when not enough arguments are supplied to tests 1`] = ` "FAIL __tests__/each-exception.test.js + ✕ throws exception when one argument too few are supplied $left == $right ✕ throws exception when not enough arguments are supplied $left == $right - ● throws exception when not enough arguments are supplied $left == $right + ● throws exception when one argument too few are supplied $left == $right Not enough arguments supplied for given headings: left | right @@ -61,7 +62,7 @@ exports[`shows error message when not enough arguments are supplied to tests 1`] true, ] - Missing 1 arguments + Missing 1 argument 6 | */ 7 | @@ -73,6 +74,29 @@ exports[`shows error message when not enough arguments are supplied to tests 1`] at __tests__/each-exception.test.js:8:1 + ● throws exception when not enough arguments are supplied $left == $right + + Not enough arguments supplied for given headings: + left | right | up | down + + Received: + Array [ + true, + true, + ] + + Missing 2 arguments + + 17 | ); + 18 | + > 19 | it.each\` + | ^ + 20 | left | right | up | down + 21 | \${true} | \${true} + 22 | \`( + + at __tests__/each-exception.test.js:19:1 + " `; diff --git a/e2e/each/__tests__/each-exception.test.js b/e2e/each/__tests__/each-exception.test.js index 6920a828aa27..9f052f5de724 100644 --- a/e2e/each/__tests__/each-exception.test.js +++ b/e2e/each/__tests__/each-exception.test.js @@ -9,6 +9,16 @@ it.each` left | right ${true} | ${true} ${true} +`( + 'throws exception when one argument too few are supplied $left == $right', + ({left, right}) => { + expect(left).toBe(right); + } +); + +it.each` + left | right | up | down + ${true} | ${true} `( 'throws exception when not enough arguments are supplied $left == $right', ({left, right}) => { diff --git a/packages/jest-each/src/bind.js b/packages/jest-each/src/bind.js index 544f21b9e056..f2abdcba0872 100644 --- a/packages/jest-each/src/bind.js +++ b/packages/jest-each/src/bind.js @@ -39,7 +39,9 @@ export default (cb: Function) => (...args: any) => const keys = getHeadingKeys(templateStrings[0]); const table = buildTable(data, keys.length, keys); - if (data.length % keys.length !== 0) { + const missingData = data.length % keys.length; + + if (missingData > 0) { const error = new Error( 'Not enough arguments supplied for given headings:\n' + EXPECTED_COLOR(keys.join(' | ')) + @@ -47,7 +49,10 @@ export default (cb: Function) => (...args: any) => 'Received:\n' + RECEIVED_COLOR(pretty(data)) + '\n\n' + - `Missing ${RECEIVED_COLOR(`${data.length % keys.length}`)} arguments`, + `Missing ${RECEIVED_COLOR(missingData.toString())} ${pluralize( + 'argument', + missingData, + )}`, ); if (Error.captureStackTrace) { @@ -136,3 +141,6 @@ const applyObjectParams = (obj: any, test: Function) => { return () => test(obj); }; + +const pluralize = (word: string, count: number) => + word + (count === 1 ? '' : 's');