diff --git a/packages/vitest/src/node/reporters/utils.ts b/packages/vitest/src/node/reporters/utils.ts index ed7e433d400d..aad3aa695c88 100644 --- a/packages/vitest/src/node/reporters/utils.ts +++ b/packages/vitest/src/node/reporters/utils.ts @@ -6,7 +6,7 @@ import type { BenchmarkBuiltinReporters, BuiltinReporters } from './index' async function loadCustomReporterModule(path: string, runner: ViteNodeRunner): Promise C> { let customReporterModule: { default: new () => C } try { - customReporterModule = await runner.executeFile(path) + customReporterModule = await runner.executeId(path) } catch (customReporterModuleError) { throw new Error(`Failed to load custom Reporter from ${path}`, { cause: customReporterModuleError as Error }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b46db0d45f61..9e8d93bf0e45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1056,9 +1056,11 @@ importers: test/reporters: specifiers: execa: ^6.1.0 + pkg-reporter: ./reportPkg/ vitest: workspace:* devDependencies: execa: 6.1.0 + pkg-reporter: link:reportPkg vitest: link:../../packages/vitest test/resolve: diff --git a/test/reporters/deps-reporter.vitest.config.ts b/test/reporters/deps-reporter.vitest.config.ts new file mode 100644 index 000000000000..bc433997271b --- /dev/null +++ b/test/reporters/deps-reporter.vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + include: ['tests/reporters.spec.ts'], + reporters: ['pkg-reporter'], + }, +}) diff --git a/test/reporters/package.json b/test/reporters/package.json index ef56ccdab942..8403bc3468ea 100644 --- a/test/reporters/package.json +++ b/test/reporters/package.json @@ -6,6 +6,7 @@ }, "devDependencies": { "execa": "^6.1.0", + "pkg-reporter": "./reportPkg/", "vitest": "workspace:*" } } diff --git a/test/reporters/reportPkg/index.js b/test/reporters/reportPkg/index.js new file mode 100644 index 000000000000..1f3c597a66d4 --- /dev/null +++ b/test/reporters/reportPkg/index.js @@ -0,0 +1,9 @@ +export default class PackageReporter { + onInit(ctx) { + this.ctx = ctx + } + + onFinished() { + this.ctx.logger.log('hello from package reporter') + } +} diff --git a/test/reporters/reportPkg/package.json b/test/reporters/reportPkg/package.json new file mode 100644 index 000000000000..498f05b5be6b --- /dev/null +++ b/test/reporters/reportPkg/package.json @@ -0,0 +1,4 @@ +{ + "name": "pkg-reporter", + "main": "./index.js" +} diff --git a/test/reporters/reportTest2/custom-reporter-path.vitest.config.ts b/test/reporters/reportTest2/custom-reporter-path.vitest.config.ts new file mode 100644 index 000000000000..d7a8d4ac855a --- /dev/null +++ b/test/reporters/reportTest2/custom-reporter-path.vitest.config.ts @@ -0,0 +1,13 @@ +import { resolve } from 'pathe' +import { defineConfig } from 'vitest/config' + +const customReporter = resolve(__dirname, '../src/custom-reporter.ts') + +export default defineConfig({ + root: __dirname, + test: { + root: __dirname, + include: ['../tests/reporters.spec.ts'], + reporters: [customReporter], + }, +}) diff --git a/test/reporters/tests/custom-reporter.spec.ts b/test/reporters/tests/custom-reporter.spec.ts index 42b9554a67aa..624bdd4451c2 100644 --- a/test/reporters/tests/custom-reporter.spec.ts +++ b/test/reporters/tests/custom-reporter.spec.ts @@ -45,6 +45,16 @@ describe.concurrent('custom reporters', () => { expect(stdout).includes('hello from custom reporter') }, 40000) + test('load no base on root custom reporter instances defined in configuration works', async () => { + const stdout = await runWithRetry('--config', './reportTest2/custom-reporter-path.vitest.config.ts') + expect(stdout).includes('hello from custom reporter') + }, 50000) + + test('package.json dependencies reporter instances defined in configuration works', async () => { + const stdout = await runWithRetry('--config', 'deps-reporter.vitest.config.ts') + expect(stdout).includes('hello from package reporter') + }, 50000) + test('a path to a custom reporter defined in configuration works', async () => { const stdout = await runWithRetry('--config', 'custom-reporter-path.vitest.config.ts', '--reporter', customJSReporterPath) expect(stdout).includes('hello from custom reporter') diff --git a/test/reporters/tests/utils.test.ts b/test/reporters/tests/utils.test.ts index e41b71ca62fc..24aa83510f4d 100644 --- a/test/reporters/tests/utils.test.ts +++ b/test/reporters/tests/utils.test.ts @@ -10,7 +10,7 @@ import TestReporter from '../src/custom-reporter' const customReporterPath = resolve(__dirname, '../src/custom-reporter.js') const fetchModule = { - executeFile: (id: string) => import(id), + executeId: (id: string) => import(id), } as ViteNodeRunner describe('Reporter Utils', () => {