[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

feat(vitest): export all reporters in `vitest/reporters` (#3980)

Co-authored-by: Vladimir <sleuths.slews0s@icloud.com>

authored by

Dunqing
Vladimir
and committed by
GitHub
(Aug 21, 2023, 6:31 PM +0200) 5704b341 20263d9d

+107 -1
+4
docs/.vitepress/config.ts
··· 129 129 text: 'Task Metadata', 130 130 link: '/advanced/metadata', 131 131 }, 132 + { 133 + text: 'Extending default reporters', 134 + link: '/advanced/reporters', 135 + }, 132 136 ], 133 137 }, 134 138 ],
+81
docs/advanced/reporters.md
··· 1 + # Extending default reporters 2 + 3 + You can import reporters from `vitest/reporters` and extend them to create your custom reporters. 4 + 5 + ## Extending built-in reporters 6 + 7 + In general, you don't need to create your reporter from scratch. `vitest` comes with several default reporting programs that you can extend. 8 + 9 + ```ts 10 + import { DefaultReporter } from 'vitest/reporters' 11 + 12 + export default class MyDefaultReporter extends DefaultReporter { 13 + // do something 14 + } 15 + ``` 16 + 17 + Of course, you can create your reporter from scratch. Just extend the `BaseReporter` class and implement the methods you need. 18 + 19 + And here is an example of a custom reporter: 20 + 21 + ```ts 22 + // ./custom-reporter.ts 23 + import { BaseReporter } from 'vitest/reporters' 24 + 25 + export default class CustomReporter extends BaseReporter { 26 + onCollected() { 27 + const files = this.ctx.state.getFiles(this.watchFilters) 28 + this.reportTestSummary(files) 29 + } 30 + } 31 + ``` 32 + 33 + Or implement the `Reporter` interface: 34 + 35 + ```ts 36 + // ./custom-reporter.ts 37 + import { Reporter } from 'vitest/reporters' 38 + 39 + export default class CustomReporter implements Reporter { 40 + onCollected() { 41 + // print something 42 + } 43 + } 44 + ``` 45 + 46 + Then you can use your custom reporter in the `vitest.config.ts` file: 47 + 48 + ```ts 49 + import { defineConfig } from 'vitest/config' 50 + import CustomReporter from './custom-reporter.js' 51 + 52 + export default defineConfig({ 53 + test: { 54 + reporters: [new CustomReporter()], 55 + }, 56 + }) 57 + ``` 58 + 59 + ## Exported reporters 60 + 61 + `vitest` comes with a few built-in reporters that you can use out of the box. 62 + 63 + ### Built-in reporters: 64 + 65 + 1. `BasicReporter` 66 + 1. `DefaultReporter` 67 + 2. `DotReporter` 68 + 3. `JsonReporter` 69 + 4. `VerboseReporter` 70 + 5. `TapReporter` 71 + 6. `JUnitReporter` 72 + 7. `TapFlatReporter` 73 + 8. `HangingProcessReporter` 74 + 75 + ### Base Abstract reporters: 76 + 77 + 1. `BaseReporter` 78 + 79 + ### Interface reporters: 80 + 81 + 1. `Reporter`
+4
packages/vitest/package.json
··· 77 77 "./coverage": { 78 78 "types": "./coverage.d.ts", 79 79 "import": "./dist/coverage.js" 80 + }, 81 + "./reporters": { 82 + "types": "./dist/reporters.d.ts", 83 + "import": "./dist/reporters.js" 80 84 } 81 85 }, 82 86 "main": "./dist/index.js",
+1
packages/vitest/reporters.d.ts
··· 1 + export * from './dist/reporters.js'
+2
packages/vitest/rollup.config.js
··· 33 33 'src/coverage.ts', 34 34 'src/public/utils.ts', 35 35 'src/public/execute.ts', 36 + 'src/public/reporters.ts', 36 37 ] 37 38 38 39 const dtsEntries = { ··· 46 47 coverage: 'src/coverage.ts', 47 48 utils: 'src/public/utils.ts', 48 49 execute: 'src/public/execute.ts', 50 + reporters: 'src/public/reporters.ts', 49 51 } 50 52 51 53 const external = [
+1
packages/vitest/src/public/reporters.ts
··· 1 + export * from '../node/reporters'
+14 -1
packages/vitest/src/node/reporters/index.ts
··· 1 + import type { Reporter } from '../../types' 1 2 import { BasicReporter } from './basic' 2 3 import { DefaultReporter } from './default' 3 4 import { DotReporter } from './dot' ··· 7 8 import { JUnitReporter } from './junit' 8 9 import { TapFlatReporter } from './tap-flat' 9 10 import { HangingProcessReporter } from './hanging-process' 11 + import type { BaseReporter } from './base' 10 12 11 - export { DefaultReporter } 13 + export { 14 + DefaultReporter, 15 + BasicReporter, 16 + DotReporter, 17 + JsonReporter, 18 + VerboseReporter, 19 + TapReporter, 20 + JUnitReporter, 21 + TapFlatReporter, 22 + HangingProcessReporter, 23 + } 24 + export type { BaseReporter, Reporter } 12 25 13 26 export const ReportersMap = { 14 27 'default': DefaultReporter,