diff --git a/packages/jest-each/src/__tests__/__snapshots__/index.test.ts.snap b/packages/jest-each/src/__tests__/__snapshots__/index.test.ts.snap new file mode 100644 index 000000000000..51e4fe4f48a0 --- /dev/null +++ b/packages/jest-each/src/__tests__/__snapshots__/index.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`throws an error when not called with the right number of arguments 1`] = `[Error: \`.each\` must only be called with an Array or Tagged Template Literal.]`; diff --git a/packages/jest-each/src/__tests__/index.test.ts b/packages/jest-each/src/__tests__/index.test.ts index 06b23edd9afc..1682f0b804a8 100644 --- a/packages/jest-each/src/__tests__/index.test.ts +++ b/packages/jest-each/src/__tests__/index.test.ts @@ -32,3 +32,19 @@ describe('template', () => { }); }); }); + +test('throws an error when not called with the right number of arguments', () => { + try { + each( + [ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], + ], + 'seems like a title but should not be here', + () => {}, + ); + } catch (e) { + expect(e).toMatchSnapshot(); + } +}); diff --git a/packages/jest-each/src/index.ts b/packages/jest-each/src/index.ts index 85a213b0cf47..9836bd2136cb 100644 --- a/packages/jest-each/src/index.ts +++ b/packages/jest-each/src/index.ts @@ -15,6 +15,13 @@ const install = ( table: Global.EachTable, ...data: Global.TemplateData ) => { + const bindingWithArray = data.length === 0; + const bindingWithTemplate = Array.isArray(table) && !!(table as any).raw; + if (!bindingWithArray && !bindingWithTemplate) { + throw new Error( + '`.each` must only be called with an Array or Tagged Template Literal.', + ); + } const test = (title: string, test: Global.EachTestFn, timeout?: number) => bind(g.test)(table, ...data)(title, test, timeout); test.skip = bind(g.test.skip)(table, ...data);