From 07a230dfec54f03130cf6a3b2b347d63e387015b Mon Sep 17 00:00:00 2001 From: golebiowskib Date: Tue, 20 Sep 2022 20:51:17 +0200 Subject: [PATCH 1/2] fix(vitest) align .each behavior with jest close #1858 --- packages/vitest/src/runtime/suite.ts | 12 ++++++--- test/core/test/each.test.ts | 40 +++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/packages/vitest/src/runtime/suite.ts b/packages/vitest/src/runtime/suite.ts index cd6ef0d475e2..44c6424f20c1 100644 --- a/packages/vitest/src/runtime/suite.ts +++ b/packages/vitest/src/runtime/suite.ts @@ -200,12 +200,15 @@ function createSuite() { return createSuiteCollector(name, factory, mode, this.concurrent, this.shuffle, options) } - suiteFn.each = function(this: { withContext: () => SuiteAPI }, cases: ReadonlyArray) { + suiteFn.each = function (this: { withContext: () => SuiteAPI }, cases: ReadonlyArray) { const suite = this.withContext() return (name: string, fn: (...args: T[]) => void, options?: number | TestOptions) => { + const arrayOnlyCases = cases.every(Array.isArray) cases.forEach((i, idx) => { const items = Array.isArray(i) ? i : [i] - suite(formatTitle(name, items, idx), () => fn(...items), options) + arrayOnlyCases + ? suite(formatTitle(name, items, idx), () => fn(...items), options) + : suite(formatTitle(name, items, idx), () => fn(i), options) }) } } @@ -233,9 +236,12 @@ function createTest(fn: ( const test = this.withContext() return (name: string, fn: (...args: T[]) => void, options?: number | TestOptions) => { + const arrayOnlyCases = cases.every(Array.isArray) cases.forEach((i, idx) => { const items = Array.isArray(i) ? i : [i] - test(formatTitle(name, items, idx), () => fn(...items), options) + arrayOnlyCases + ? test(formatTitle(name, items, idx), () => fn(...items), options) + : test(formatTitle(name, items, idx), () => fn(i), options) }) } } diff --git a/test/core/test/each.test.ts b/test/core/test/each.test.ts index 354f0aa3f5df..0048c73bd959 100644 --- a/test/core/test/each.test.ts +++ b/test/core/test/each.test.ts @@ -8,13 +8,6 @@ test.each([ expect(a + b).toBe(expected) }) -test.each([ - null, - [null], -])('null is null', (value) => { - expect(value).toBe(null) -}) - test.each([ ['string', true], ['string', false], @@ -136,3 +129,36 @@ describe('context with each - concurrent', () => { }) }) }) + +describe('not all arguments are array describe.each', () => { + const results = [null, [null]] + let i = 0 + + describe.each([null, [null]])('null is null', (value) => { + test('null is null', () => { + expect(value).toEqual(results[i++]) + }) + }) +}) + +describe('not all arguments are array test.each', () => { + const results = [null, [null]] + let i = 0 + + test.each([null, [null]])('null is null', (value) => { + expect(value).toEqual(results[i++]) + }) +}) + +test.each([ + null, +])('value is null', (value) => { + expect(value).toBeNull() +}) + +test.each([ + [null, null], + [null, null], +])('if all cases are arrays of equal length, treats array elements as arguments', (value) => { + expect(value).toBeNull() +}) From 778b1c22d5690532185ceef96aed311547dc2454 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 7 Nov 2022 18:42:42 +0800 Subject: [PATCH 2/2] chore: update --- test/core/test/each.test.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/core/test/each.test.ts b/test/core/test/each.test.ts index 0048c73bd959..fe156aa024d0 100644 --- a/test/core/test/each.test.ts +++ b/test/core/test/each.test.ts @@ -142,10 +142,16 @@ describe('not all arguments are array describe.each', () => { }) describe('not all arguments are array test.each', () => { - const results = [null, [null]] + const results = [ + null, + [null], + ] let i = 0 - test.each([null, [null]])('null is null', (value) => { + test.each([ + null, + [null], + ])('matches results', (value) => { expect(value).toEqual(results[i++]) }) }) @@ -159,6 +165,7 @@ test.each([ test.each([ [null, null], [null, null], -])('if all cases are arrays of equal length, treats array elements as arguments', (value) => { - expect(value).toBeNull() +])('if all cases are arrays of equal length, treats array elements as arguments', (value1, value2) => { + expect(value1).toBeNull() + expect(value2).toBeNull() })