diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 025fad623b03..92a2c40f5096 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -951,6 +951,7 @@ importers: specifiers: '@vitejs/plugin-vue': latest '@vue/test-utils': latest + execa: ^6.1.0 happy-dom: latest vite: ^3.1.0 vitest: workspace:* @@ -958,6 +959,7 @@ importers: devDependencies: '@vitejs/plugin-vue': 3.1.2_vite@3.1.0+vue@3.2.41 '@vue/test-utils': 2.1.0_vue@3.2.41 + execa: 6.1.0 happy-dom: 7.5.14 vite: 3.1.0 vitest: link:../../packages/vitest diff --git a/test/coverage-test/coverage-test/c8/coverage-report/SFC.test.ts b/test/coverage-test/coverage-test/c8/coverage-report/SFC.test.ts new file mode 100644 index 000000000000..171ce2e7427f --- /dev/null +++ b/test/coverage-test/coverage-test/c8/coverage-report/SFC.test.ts @@ -0,0 +1,14 @@ +/** + * @vitest-environment happy-dom + */ + +import { mount } from '@vue/test-utils' +import { expect, test } from 'vitest' +import SFC from '../../../src/coverage-report/SFC.vue' + +test('Should update count', async () => { + const wrapper = mount(SFC) + + await wrapper.find('button').trigger('click') + expect(wrapper.text()).contain(1) +}) diff --git a/test/coverage-test/coverage-test/c8/coverage-report/math.test.ts b/test/coverage-test/coverage-test/c8/coverage-report/math.test.ts new file mode 100644 index 000000000000..0f669a2482a4 --- /dev/null +++ b/test/coverage-test/coverage-test/c8/coverage-report/math.test.ts @@ -0,0 +1,10 @@ +import { expect, test } from 'vitest' +import { add, multiply } from '../../../src/coverage-report/math' + +test('add', () => { + expect(add(10, 15)).toBe(25) +}) + +test('multiply', () => { + expect(multiply(2, 5)).toBe(10) +}) diff --git a/test/coverage-test/coverage-test/c8/coverage-report/not-SFC/not-SFC.test.ts b/test/coverage-test/coverage-test/c8/coverage-report/not-SFC/not-SFC.test.ts new file mode 100644 index 000000000000..3200a9b94cd4 --- /dev/null +++ b/test/coverage-test/coverage-test/c8/coverage-report/not-SFC/not-SFC.test.ts @@ -0,0 +1,14 @@ +/** + * @vitest-environment happy-dom + */ + +import { mount } from '@vue/test-utils' +import { expect, test } from 'vitest' +import notSFC from '../../../../src/coverage-report/not-SFC/not-SFC.vue' + +test('Should update count', async () => { + const wrapper = mount(notSFC) + + await wrapper.find('button').trigger('click') + expect(wrapper.text()).contain(1) +}) diff --git a/test/coverage-test/coverage-test/c8/coverage-report/utils.test.js b/test/coverage-test/coverage-test/c8/coverage-report/utils.test.js new file mode 100644 index 000000000000..307e37beb5ce --- /dev/null +++ b/test/coverage-test/coverage-test/c8/coverage-report/utils.test.js @@ -0,0 +1,6 @@ +import { expect, test } from 'vitest' +import { add } from '../../src/coverage-report/utils.js' + +test('add', () => { + expect(add(10, 15)).toBe(25) +}) diff --git a/test/coverage-test/coverage-test/coverage.c8.test.ts b/test/coverage-test/coverage-test/coverage.c8.test.ts index 75b544526efb..1c90e4e8af96 100644 --- a/test/coverage-test/coverage-test/coverage.c8.test.ts +++ b/test/coverage-test/coverage-test/coverage.c8.test.ts @@ -1,7 +1,24 @@ import fs from 'fs' +import { execa } from 'execa' import { resolve } from 'pathe' import { expect, test } from 'vitest' +async function run(...runOptions: string[]): Promise { + const root = resolve(__dirname, '..') + + const { stdout } = await execa('npx', ['vitest', 'run', ...runOptions], { + cwd: root, + env: { + ...process.env, + CI: 'true', + NO_COLOR: 'true', + }, + windowsHide: false, + }) + + return stdout +} + test('coverage c8', async () => { const coveragePath = resolve('./coverage/tmp/') const stat = fs.statSync(coveragePath) @@ -9,3 +26,17 @@ test('coverage c8', async () => { const files = fs.readdirSync(coveragePath) expect(files.length > 0).toBe(true) }) + +test('Should show coverage', async () => { + const stdout = await run('--config', 'vitest.config-c8-coverage.ts', '--coverage') + + // For Vue SFC and vue + ts files + expect(stdout).contain('not-SFC.ts') + expect(stdout).not.contain('not-SFC.ts?vue') + expect(stdout).contain('not-SFC.vue') + expect(stdout).contain('SFC.vue') + + // For ts and js files + expect(stdout).contain('math.ts') + expect(stdout).contain('utils.js') +}) diff --git a/test/coverage-test/package.json b/test/coverage-test/package.json index 5c5e123f7435..dd14ee429d4f 100644 --- a/test/coverage-test/package.json +++ b/test/coverage-test/package.json @@ -19,6 +19,7 @@ "devDependencies": { "@vitejs/plugin-vue": "latest", "@vue/test-utils": "latest", + "execa": "^6.1.0", "happy-dom": "latest", "vite": "latest", "vitest": "workspace:*", diff --git a/test/coverage-test/src/coverage-report/SFC.vue b/test/coverage-test/src/coverage-report/SFC.vue new file mode 100644 index 000000000000..1d581cbe1688 --- /dev/null +++ b/test/coverage-test/src/coverage-report/SFC.vue @@ -0,0 +1,17 @@ + + + diff --git a/test/coverage-test/src/coverage-report/math.ts b/test/coverage-test/src/coverage-report/math.ts new file mode 100644 index 000000000000..1beddcd2a518 --- /dev/null +++ b/test/coverage-test/src/coverage-report/math.ts @@ -0,0 +1,15 @@ +export function add(a: number, b: number) { + return a + b +} + +export function multiply(a: number, b: number) { + return a * b +} + +export function untestedFn(a: number, b: number) { + return a * b +} + +export function untestedFn2(a: number, b: number) { + return a * b +} diff --git a/test/coverage-test/src/coverage-report/not-SFC/not-SFC.ts b/test/coverage-test/src/coverage-report/not-SFC/not-SFC.ts new file mode 100644 index 000000000000..1d11461f9755 --- /dev/null +++ b/test/coverage-test/src/coverage-report/not-SFC/not-SFC.ts @@ -0,0 +1,9 @@ +import { defineComponent, ref } from 'vue' + +export default defineComponent({ + setup() { + const count = ref(0) + + return { count } + }, +}) diff --git a/test/coverage-test/src/coverage-report/not-SFC/not-SFC.vue b/test/coverage-test/src/coverage-report/not-SFC/not-SFC.vue new file mode 100644 index 000000000000..27f56af34a91 --- /dev/null +++ b/test/coverage-test/src/coverage-report/not-SFC/not-SFC.vue @@ -0,0 +1,7 @@ + + + diff --git a/test/coverage-test/src/coverage-report/utils.js b/test/coverage-test/src/coverage-report/utils.js new file mode 100644 index 000000000000..06047664e378 --- /dev/null +++ b/test/coverage-test/src/coverage-report/utils.js @@ -0,0 +1,3 @@ +export function add(a, b) { + return a + b +} diff --git a/test/coverage-test/vitest.config-c8-coverage.ts b/test/coverage-test/vitest.config-c8-coverage.ts index 0e9e69239b76..8ab2bb8b003b 100644 --- a/test/coverage-test/vitest.config-c8-coverage.ts +++ b/test/coverage-test/vitest.config-c8-coverage.ts @@ -1,9 +1,16 @@ import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' export default defineConfig({ + plugins: [vue()], test: { include: [ './coverage-test/*.c8.test.ts', + './coverage-test/c8/**/*test.ts', ], + coverage: { + include: ['src/**'], + extension: ['.ts', '.vue', '.js'], + }, }, }) diff --git a/test/coverage-test/vitest.config.ts b/test/coverage-test/vitest.config.ts index 0570d7959b7b..036738b8691c 100644 --- a/test/coverage-test/vitest.config.ts +++ b/test/coverage-test/vitest.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ 'test/*.test.ts', ], exclude: [ - 'coverage-test/*.test.ts', + 'coverage-test/**/*', ], coverage: { enabled: true,