Skip to content

Commit

Permalink
fix(vitest) align .each behavior with jest
Browse files Browse the repository at this point in the history
  • Loading branch information
golebiowskib committed Sep 20, 2022
1 parent 93a0f42 commit 07a230d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 10 deletions.
12 changes: 9 additions & 3 deletions packages/vitest/src/runtime/suite.ts
Expand Up @@ -200,12 +200,15 @@ function createSuite() {
return createSuiteCollector(name, factory, mode, this.concurrent, this.shuffle, options)
}

suiteFn.each = function<T>(this: { withContext: () => SuiteAPI }, cases: ReadonlyArray<T>) {
suiteFn.each = function <T>(this: { withContext: () => SuiteAPI }, cases: ReadonlyArray<T>) {
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)
})
}
}
Expand Down Expand Up @@ -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)
})
}
}
Expand Down
40 changes: 33 additions & 7 deletions test/core/test/each.test.ts
Expand Up @@ -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],
Expand Down Expand Up @@ -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()
})

0 comments on commit 07a230d

Please sign in to comment.