also see playwright-ct-react
see test-components
- step 1, install monocart-reporter
npm i monocart-reporter -D
- step 2, add monocart-reporter to playwright config
// playwright-ct.config.js
const { defineConfig, devices } = require('@playwright/experimental-ct-vue');
module.exports = defineConfig({
testDir: './tests',
reporter: [
['list'],
['monocart-reporter', {
name: 'Playwright CT Vue Report',
outputFile: 'docs/index.html',
coverage: {
entryFilter: (entry) => true,
sourceFilter: (sourcePath) => sourcePath.search(/src\//) !== -1,
lcov: true
}
}]
],
});
- step 3, collect coverage data
Collect coverage with playwright Automatic fixtures
// fixtures.js
import { test as ctBase, expect } from '@playwright/experimental-ct-vue';
import { addCoverageReport } from 'monocart-reporter';
const test = ctBase.extend({
autoTestFixture: [async ({ page }, use) => {
// console.log('autoTestFixture setup...');
// coverage API is chromium only
if (test.info().project.name === 'chromium') {
await Promise.all([
page.coverage.startJSCoverage({
resetOnNavigation: false
}),
page.coverage.startCSSCoverage({
resetOnNavigation: false
})
]);
}
await use('autoTestFixture');
// console.log('autoTestFixture teardown...');
if (test.info().project.name === 'chromium') {
const [jsCoverage, cssCoverage] = await Promise.all([
page.coverage.stopJSCoverage(),
page.coverage.stopCSSCoverage()
]);
const coverageList = [... jsCoverage, ... cssCoverage];
console.log(coverageList.map((item) => item.url));
await addCoverageReport(coverageList, test.info());
}
}, {
scope: 'test',
auto: true
}]
});
export { test, expect };
// App.spec.js
import { test, expect } from './fixtures.js';
import App from '../src/App.vue';
test('App should work', async ({ mount }) => {
const component = await mount(App);
await expect(component).toContainText('Vite + Vue');
});
- step 4, write more tests and run test
npm run test
# The coverage report will be generated in your output dir:
- step 5, Github action for Codecov
- name: Codecov
uses: codecov/codecov-action@v3
See static.yml
VSCode + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).
See Vite Configuration Reference.
npm install
npm run dev
npm run build
Lint with ESLint
npm run lint