mirror of
https://github.com/kestra-io/kestra.git
synced 2025-12-19 18:05:41 -05:00
build: use storybook test addon to get coverage (#8316)
This commit is contained in:
committed by
GitHub
parent
504ff282ef
commit
2c411a27cc
17
.github/workflows/workflow-frontend-test.yml
vendored
17
.github/workflows/workflow-frontend-test.yml
vendored
@@ -41,28 +41,15 @@ jobs:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
run: npm run build
|
||||
|
||||
- name: Run front-end unit tests
|
||||
shell: bash
|
||||
working-directory: ui
|
||||
run: npm run test:cicd
|
||||
|
||||
- name: Storybook - Install Playwright
|
||||
shell: bash
|
||||
working-directory: ui
|
||||
run: npx playwright install --with-deps
|
||||
|
||||
- name: Storybook - Build
|
||||
- name: Run front-end unit tests
|
||||
shell: bash
|
||||
working-directory: ui
|
||||
run: npm run build-storybook --quiet
|
||||
|
||||
- name: Storybook - Run tests
|
||||
shell: bash
|
||||
working-directory: ui
|
||||
run: |
|
||||
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
|
||||
"npx http-server storybook-static --port 6006 --silent" \
|
||||
"npx wait-on tcp:127.0.0.1:6006 && npm run test:storybook"
|
||||
run: npm run test:cicd
|
||||
|
||||
- name: Codecov - Upload coverage reports
|
||||
uses: codecov/codecov-action@v5
|
||||
|
||||
@@ -8,7 +8,7 @@ const config: StorybookConfig = {
|
||||
"@storybook/addon-essentials",
|
||||
"@storybook/addon-themes",
|
||||
"@chromatic-com/storybook",
|
||||
"@storybook/addon-interactions",
|
||||
"@storybook/experimental-addon-test"
|
||||
],
|
||||
framework: {
|
||||
name: "@storybook/vue3-vite",
|
||||
@@ -17,7 +17,7 @@ const config: StorybookConfig = {
|
||||
async viteFinal(config) {
|
||||
const {default: viteJSXPlugin} = await import("@vitejs/plugin-vue-jsx")
|
||||
config.plugins = [
|
||||
...config.plugins ?? [],
|
||||
...(config.plugins ?? []),
|
||||
viteJSXPlugin(),
|
||||
];
|
||||
return config;
|
||||
|
||||
9
ui/.storybook/vitest.setup.ts
Normal file
9
ui/.storybook/vitest.setup.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import {beforeAll} from "vitest";
|
||||
import {setProjectAnnotations} from "@storybook/vue3";
|
||||
import * as projectAnnotations from "./preview";
|
||||
|
||||
// This is an important step to apply the right configuration when testing your stories.
|
||||
// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
|
||||
const project = setProjectAnnotations([projectAnnotations]);
|
||||
|
||||
beforeAll(project.beforeAll);
|
||||
@@ -20,6 +20,7 @@ export default [
|
||||
"**/*.spec.ts",
|
||||
"vite.config.js",
|
||||
"vitest.config.js",
|
||||
"vitest.workspace.js",
|
||||
],
|
||||
languageOptions: {globals: globals.node},
|
||||
},
|
||||
|
||||
182
ui/package-lock.json
generated
182
ui/package-lock.json
generated
@@ -69,9 +69,9 @@
|
||||
"@rushstack/eslint-patch": "^1.11.0",
|
||||
"@shikijs/markdown-it": "^3.2.1",
|
||||
"@storybook/addon-essentials": "^8.6.12",
|
||||
"@storybook/addon-interactions": "^8.6.12",
|
||||
"@storybook/addon-themes": "^8.6.12",
|
||||
"@storybook/blocks": "^8.6.12",
|
||||
"@storybook/experimental-addon-test": "^8.6.12",
|
||||
"@storybook/test": "^8.6.12",
|
||||
"@storybook/test-runner": "^0.22.0",
|
||||
"@storybook/vue3": "^8.6.12",
|
||||
@@ -83,6 +83,7 @@
|
||||
"@typescript-eslint/parser": "^8.28.0",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||
"@vitest/browser": "^3.1.1",
|
||||
"@vitest/coverage-v8": "^3.1.1",
|
||||
"@vue/eslint-config-prettier": "^10.2.0",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
@@ -99,6 +100,7 @@
|
||||
"monaco-editor": "^0.52.2",
|
||||
"monaco-yaml": "^5.3.1",
|
||||
"patch-package": "^8.0.0",
|
||||
"playwright": "^1.51.1",
|
||||
"prettier": "^3.5.3",
|
||||
"rollup-plugin-copy": "^3.5.0",
|
||||
"sass": "^1.86.3",
|
||||
@@ -3707,6 +3709,13 @@
|
||||
"url": "https://opencollective.com/unts"
|
||||
}
|
||||
},
|
||||
"node_modules/@polka/url": {
|
||||
"version": "1.0.0-next.28",
|
||||
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
|
||||
"integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@popperjs/core": {
|
||||
"name": "@sxzz/popperjs-es",
|
||||
"version": "2.11.7",
|
||||
@@ -4313,27 +4322,6 @@
|
||||
"storybook": "^8.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@storybook/addon-interactions": {
|
||||
"version": "8.6.12",
|
||||
"resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.12.tgz",
|
||||
"integrity": "sha512-cTAJlTq6uVZBEbtwdXkXoPQ4jHOAGKQnYSezBT4pfNkdjn/FnEeaQhMBDzf14h2wr5OgBnJa6Lmd8LD9ficz4A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@storybook/global": "^5.0.0",
|
||||
"@storybook/instrumenter": "8.6.12",
|
||||
"@storybook/test": "8.6.12",
|
||||
"polished": "^4.2.2",
|
||||
"ts-dedent": "^2.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/storybook"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"storybook": "^8.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@storybook/addon-measure": {
|
||||
"version": "8.6.12",
|
||||
"resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.12.tgz",
|
||||
@@ -4539,6 +4527,43 @@
|
||||
"storybook": "^8.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@storybook/experimental-addon-test": {
|
||||
"version": "8.6.12",
|
||||
"resolved": "https://registry.npmjs.org/@storybook/experimental-addon-test/-/experimental-addon-test-8.6.12.tgz",
|
||||
"integrity": "sha512-auc8Ql0buH0WeaKVuSSuabxIiBWvqvAyxtXCm1sVMkL68GwrX3cmpNMwviz3mvKvM//F8zKi/31HMl1PZ5UnIA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@storybook/global": "^5.0.0",
|
||||
"@storybook/icons": "^1.2.12",
|
||||
"@storybook/instrumenter": "8.6.12",
|
||||
"@storybook/test": "8.6.12",
|
||||
"polished": "^4.2.2",
|
||||
"prompts": "^2.4.0",
|
||||
"ts-dedent": "^2.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/storybook"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vitest/browser": "^2.1.1 || ^3.0.0",
|
||||
"@vitest/runner": "^2.1.1 || ^3.0.0",
|
||||
"storybook": "^8.6.12",
|
||||
"vitest": "^2.1.1 || ^3.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vitest/browser": {
|
||||
"optional": true
|
||||
},
|
||||
"@vitest/runner": {
|
||||
"optional": true
|
||||
},
|
||||
"vitest": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@storybook/global": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
|
||||
@@ -6574,6 +6599,84 @@
|
||||
"vue": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/browser": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.1.1.tgz",
|
||||
"integrity": "sha512-A+A69mMtrj1RPh96LfXGc309KSXhy2MslvyL+cp9+Y5EVdoJD4KfXDx/3SSlRGN70+hIoJ3RRbTidTvj18PZ/A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@testing-library/dom": "^10.4.0",
|
||||
"@testing-library/user-event": "^14.6.1",
|
||||
"@vitest/mocker": "3.1.1",
|
||||
"@vitest/utils": "3.1.1",
|
||||
"magic-string": "^0.30.17",
|
||||
"sirv": "^3.0.1",
|
||||
"tinyrainbow": "^2.0.0",
|
||||
"ws": "^8.18.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"playwright": "*",
|
||||
"vitest": "3.1.1",
|
||||
"webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"playwright": {
|
||||
"optional": true
|
||||
},
|
||||
"safaridriver": {
|
||||
"optional": true
|
||||
},
|
||||
"webdriverio": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/browser/node_modules/@testing-library/user-event": {
|
||||
"version": "14.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
|
||||
"integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12",
|
||||
"npm": ">=6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@testing-library/dom": ">=7.21.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/browser/node_modules/@vitest/pretty-format": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz",
|
||||
"integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/browser/node_modules/@vitest/utils": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz",
|
||||
"integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "3.1.1",
|
||||
"loupe": "^3.1.3",
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/coverage-v8": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.1.tgz",
|
||||
@@ -16329,6 +16432,16 @@
|
||||
"monaco-editor": ">=0.36"
|
||||
}
|
||||
},
|
||||
"node_modules/mrmime": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
|
||||
"integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
@@ -19312,6 +19425,21 @@
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/sirv": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
|
||||
"integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@polka/url": "^1.0.0-next.24",
|
||||
"mrmime": "^2.0.0",
|
||||
"totalist": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/sisteransi": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
|
||||
@@ -20218,6 +20346,16 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/totalist": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
|
||||
"integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tough-cookie": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
"test:unit": "vitest run",
|
||||
"test:lint": "eslint",
|
||||
"test:cicd": "vitest run --coverage --exclude=\"**/translation.spec.js\"",
|
||||
"test:storybook": "vitest run --project=storybook",
|
||||
"translations:check": "node ./src/translations/check.js",
|
||||
"lint": "eslint --fix",
|
||||
"storybook": "storybook dev -p 6006",
|
||||
"build-storybook": "storybook build",
|
||||
"test:storybook": "test-storybook",
|
||||
"prepare": "cd .. && husky ui/.husky && rm -f .git/hooks/*",
|
||||
"notes": "node ./scripts/ci/generateReleaseNotes",
|
||||
"postinstall": "patch-package"
|
||||
@@ -81,9 +81,9 @@
|
||||
"@rushstack/eslint-patch": "^1.11.0",
|
||||
"@shikijs/markdown-it": "^3.2.1",
|
||||
"@storybook/addon-essentials": "^8.6.12",
|
||||
"@storybook/addon-interactions": "^8.6.12",
|
||||
"@storybook/addon-themes": "^8.6.12",
|
||||
"@storybook/blocks": "^8.6.12",
|
||||
"@storybook/experimental-addon-test": "^8.6.12",
|
||||
"@storybook/test": "^8.6.12",
|
||||
"@storybook/test-runner": "^0.22.0",
|
||||
"@storybook/vue3": "^8.6.12",
|
||||
@@ -95,6 +95,7 @@
|
||||
"@typescript-eslint/parser": "^8.28.0",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||
"@vitest/browser": "^3.1.1",
|
||||
"@vitest/coverage-v8": "^3.1.1",
|
||||
"@vue/eslint-config-prettier": "^10.2.0",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
@@ -111,6 +112,7 @@
|
||||
"monaco-editor": "^0.52.2",
|
||||
"monaco-yaml": "^5.3.1",
|
||||
"patch-package": "^8.0.0",
|
||||
"playwright": "^1.51.1",
|
||||
"prettier": "^3.5.3",
|
||||
"rollup-plugin-copy": "^3.5.0",
|
||||
"sass": "^1.86.3",
|
||||
|
||||
@@ -22,10 +22,16 @@ export default defineConfig({
|
||||
junit: "./test-report.junit.xml",
|
||||
},
|
||||
coverage: {
|
||||
include: [
|
||||
"src/**/*.{js,ts,vue}",
|
||||
],
|
||||
exclude: [
|
||||
...coverageConfigDefaults.exclude,
|
||||
"stylelint.config.mjs",
|
||||
"storybook-static/**",
|
||||
"**/.storybook/**",
|
||||
"**/*.stories.*",
|
||||
"**/*.d.ts",
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
1
ui/vitest.shims.d.ts
vendored
Normal file
1
ui/vitest.shims.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/// <reference types="@vitest/browser/providers/playwright" />
|
||||
28
ui/vitest.workspace.js
Normal file
28
ui/vitest.workspace.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import path from "node:path";
|
||||
|
||||
import {defineWorkspace} from "vitest/config";
|
||||
|
||||
import {storybookTest} from "@storybook/experimental-addon-test/vitest-plugin";
|
||||
|
||||
// More info at: https://storybook.js.org/docs/writing-tests/test-addon
|
||||
export default defineWorkspace([
|
||||
"vitest.config.js",
|
||||
{
|
||||
extends: "vite.config.js",
|
||||
plugins: [
|
||||
// The plugin will run tests for the stories defined in your Storybook config
|
||||
// See options at: https://storybook.js.org/docs/writing-tests/test-addon#storybooktest
|
||||
storybookTest({configDir: path.join(__dirname, ".storybook")}),
|
||||
],
|
||||
test: {
|
||||
name: "storybook",
|
||||
browser: {
|
||||
enabled: true,
|
||||
headless: true,
|
||||
provider: "playwright",
|
||||
instances: [{browser: "chromium"}],
|
||||
},
|
||||
setupFiles: [".storybook/vitest.setup.ts"],
|
||||
},
|
||||
},
|
||||
]);
|
||||
Reference in New Issue
Block a user