fix(collect): don't treat extra props on `test` return as tests (#9871) · vitest-dev/vitest@141e72a

@@ -1407,6 +1407,159 @@ test('invalid @module-tag throws and error', async () => {

14071407

`)

14081408

})

140914091410+

test('collects tests with runIf modifier', async () => {

1411+

const testModule = await collectTests(`

1412+

import { test } from 'vitest'

1413+1414+

describe('runIf tests', () => {

1415+

test.runIf(true)('runs conditionally', () => {})

1416+

test.runIf(false)('also conditional', () => {})

1417+

})

1418+

`)

1419+

expect(testModule).toMatchInlineSnapshot(`

1420+

{

1421+

"runIf tests": {

1422+

"also conditional": {

1423+

"errors": [],

1424+

"fullName": "runIf tests > also conditional",

1425+

"id": "-1732721377_0_1",

1426+

"location": "6:22",

1427+

"mode": "skip",

1428+

"state": "skipped",

1429+

},

1430+

"runs conditionally": {

1431+

"errors": [],

1432+

"fullName": "runIf tests > runs conditionally",

1433+

"id": "-1732721377_0_0",

1434+

"location": "5:21",

1435+

"mode": "skip",

1436+

"state": "skipped",

1437+

},

1438+

},

1439+

}

1440+

`)

1441+

})

1442+1443+

test('collects tests with skipIf modifier', async () => {

1444+

const testModule = await collectTests(`

1445+

import { test } from 'vitest'

1446+1447+

describe('skipIf tests', () => {

1448+

test.skipIf(true)('skips conditionally', () => {})

1449+

test.skipIf(false)('also conditional skip', () => {})

1450+

})

1451+

`)

1452+

expect(testModule).toMatchInlineSnapshot(`

1453+

{

1454+

"skipIf tests": {

1455+

"also conditional skip": {

1456+

"errors": [],

1457+

"fullName": "skipIf tests > also conditional skip",

1458+

"id": "-1732721377_0_1",

1459+

"location": "6:23",

1460+

"mode": "skip",

1461+

"state": "skipped",

1462+

},

1463+

"skips conditionally": {

1464+

"errors": [],

1465+

"fullName": "skipIf tests > skips conditionally",

1466+

"id": "-1732721377_0_0",

1467+

"location": "5:22",

1468+

"mode": "skip",

1469+

"state": "skipped",

1470+

},

1471+

},

1472+

}

1473+

`)

1474+

})

1475+1476+

test('collects tests with for modifier', async () => {

1477+

const testModule = await collectTests(`

1478+

import { test } from 'vitest'

1479+1480+

describe('for tests', () => {

1481+

test.for([1, 2, 3])('test with for %i', (num) => {})

1482+

test.skip.for([1, 2])('skipped for %i', (num) => {})

1483+

})

1484+

`)

1485+

expect(testModule).toMatchInlineSnapshot(`

1486+

{

1487+

"for tests": {

1488+

"skipped for %i": {

1489+

"dynamic": true,

1490+

"each": true,

1491+

"errors": [],

1492+

"fullName": "for tests > skipped for %i",

1493+

"id": "-1732721377_0_1-dynamic",

1494+

"location": "6:26",

1495+

"mode": "skip",

1496+

"state": "skipped",

1497+

},

1498+

"test with for %i": {

1499+

"dynamic": true,

1500+

"each": true,

1501+

"errors": [],

1502+

"fullName": "for tests > test with for %i",

1503+

"id": "-1732721377_0_0-dynamic",

1504+

"location": "5:24",

1505+

"mode": "run",

1506+

"state": "pending",

1507+

},

1508+

},

1509+

}

1510+

`)

1511+

})

1512+1513+

test('properties on test don\'t generate tests', async () => {

1514+

const testModule = await collectTests(`

1515+

import { test, describe } from 'vitest'

1516+1517+

test('actual test', () => {}).withProp(true).withProp(false)

1518+

test.for([])('actual 2 test', () => {}).withProp('a2').withProp('a3')

1519+

testContext('actual 3 test', () => {}).withProp('q4').withProp('q5')

1520+

test('actual 4 test', () => {}).skip('hello world')

1521+

testContext().withProp('q6').withProp('q7')

1522+

`)

1523+

expect(testModule).toMatchInlineSnapshot(`

1524+

{

1525+

"actual 2 test": {

1526+

"dynamic": true,

1527+

"each": true,

1528+

"errors": [],

1529+

"fullName": "actual 2 test",

1530+

"id": "-1732721377_1-dynamic",

1531+

"location": "5:15",

1532+

"mode": "run",

1533+

"state": "pending",

1534+

},

1535+

"actual 3 test": {

1536+

"errors": [],

1537+

"fullName": "actual 3 test",

1538+

"id": "-1732721377_2",

1539+

"location": "6:4",

1540+

"mode": "run",

1541+

"state": "pending",

1542+

},

1543+

"actual 4 test": {

1544+

"errors": [],

1545+

"fullName": "actual 4 test",

1546+

"id": "-1732721377_3",

1547+

"location": "7:4",

1548+

"mode": "run",

1549+

"state": "pending",

1550+

},

1551+

"actual test": {

1552+

"errors": [],

1553+

"fullName": "actual test",

1554+

"id": "-1732721377_0",

1555+

"location": "4:4",

1556+

"mode": "run",

1557+

"state": "pending",

1558+

},

1559+

}

1560+

`)

1561+

})

1562+14101563

async function collectTestModule(code: string, options?: CliOptions) {

14111564

const vitest = await createVitest(

14121565

'test',