Skip to content

Commit

Permalink
[jest-each] Fix pluralising missing arguments error (#6369)
Browse files Browse the repository at this point in the history
* Add pluralize to missing arguments error

* Update changelog

* Fix pr links
  • Loading branch information
mattphillips authored and cpojer committed Jun 2, 2018
1 parent 00a8117 commit 3a1afce
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
28 changes: 26 additions & 2 deletions e2e/__tests__/__snapshots__/each.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 |
Expand All @@ -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
"
`;

Expand Down
10 changes: 10 additions & 0 deletions e2e/each/__tests__/each-exception.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}) => {
Expand Down
12 changes: 10 additions & 2 deletions packages/jest-each/src/bind.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,20 @@ 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(' | ')) +
'\n\n' +
'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) {
Expand Down Expand Up @@ -136,3 +141,6 @@ const applyObjectParams = (obj: any, test: Function) => {

return () => test(obj);
};

const pluralize = (word: string, count: number) =>
word + (count === 1 ? '' : 's');

0 comments on commit 3a1afce

Please sign in to comment.