From 4c92bb75268fc07cdae868d594118613af0a468d Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Sun, 19 Apr 2026 20:01:13 +0200 Subject: [PATCH] test: try to fix unit tests with new vite version Signed-off-by: Ferdinand Thiessen --- .gitignore | 2 + apps/files/src/services/Search.spec.ts | 2 +- build/frontend-legacy/vitest.config.mts | 1 - build/frontend/vitest.config.ts | 7 +- package-lock.json | 100 ++++++++++++++++++------ package.json | 14 ++-- vitest.config.ts | 18 ++++- 7 files changed, 107 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 06cb1ac1ecc..d2958f124e0 100644 --- a/.gitignore +++ b/.gitignore @@ -161,6 +161,8 @@ Vagrantfile /config/autoconfig.php clover.xml /coverage +.vitest*/ +__screenshots__/ # Tests - dependencies tests/acceptance/vendor/ diff --git a/apps/files/src/services/Search.spec.ts b/apps/files/src/services/Search.spec.ts index 2f8b23751ba..bf726c12136 100644 --- a/apps/files/src/services/Search.spec.ts +++ b/apps/files/src/services/Search.spec.ts @@ -35,7 +35,7 @@ describe('Search service', () => { searchNodes.mockImplementationOnce(() => { throw new Error('expected error') }) - expect(() => getContents('', { signal: new AbortController().signal })).rejects.toThrow('expected error') + await expect(() => getContents('', { signal: new AbortController().signal })).rejects.toThrow('expected error') }) it('returns the search results and a fake root', async () => { diff --git a/build/frontend-legacy/vitest.config.mts b/build/frontend-legacy/vitest.config.mts index 066a5594c74..3189ba12a44 100644 --- a/build/frontend-legacy/vitest.config.mts +++ b/build/frontend-legacy/vitest.config.mts @@ -57,7 +57,6 @@ export default defineConfig({ coverage: { include: ['./apps/*/src/**', 'core/src/**'], exclude: ['**.spec.*', '**.test.*', '**.cy.*', 'core/src/tests/**'], - provider: 'istanbul', reporter: ['lcov', 'text'], reportsDirectory: resolve(import.meta.dirname, '../../coverage/legacy'), }, diff --git a/build/frontend/vitest.config.ts b/build/frontend/vitest.config.ts index a7078a2356f..1b942aa56dc 100644 --- a/build/frontend/vitest.config.ts +++ b/build/frontend/vitest.config.ts @@ -54,7 +54,6 @@ export default defineConfig({ /* 'core/src/**', */ ], exclude: ['**.spec.*', '**.test.*', '**.cy.*', 'core/src/tests/**'], - provider: 'istanbul', reporter: ['lcov', 'text'], reportsDirectory: resolve(import.meta.dirname, '../../coverage'), }, @@ -72,5 +71,11 @@ export default defineConfig({ inline: [/@nextcloud\//], }, }, + onUnhandledError(error) { + // TODO: remove when this is fixed: https://github.com/nextcloud-libraries/nextcloud-vue/issues/8090 + if (error.message.includes('`fallbackFocus` was specified but was not a node, or did not return a node')) { + return false + } + }, }, }) diff --git a/package-lock.json b/package-lock.json index fdff3175508..600d0d1fe3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,9 +48,9 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/vue": "^8.1.0", "@types/dockerode": "^4.0.1", - "@vitest/coverage-istanbul": "^4.1.4", + "@vitest/coverage-v8": "^4.1.4", "@vue/test-utils": "^2.4.6", - "@vue/tsconfig": "^0.9.0", + "@vue/tsconfig": "^0.9.1", "@zip.js/zip.js": "^2.8.26", "concurrently": "^9.2.1", "cypress": "^15.14.0", @@ -69,7 +69,7 @@ "sass": "^1.99.0", "stylelint": "^17.8.0", "vite": "^7.3.2", - "vitest": "^4.0.15" + "vitest": "^4.1.4" }, "engines": { "node": "^24.0.0", @@ -218,6 +218,7 @@ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -228,6 +229,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -259,6 +261,7 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -285,6 +288,7 @@ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -302,6 +306,7 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -312,6 +317,7 @@ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -322,6 +328,7 @@ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" @@ -336,6 +343,7 @@ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", @@ -381,6 +389,7 @@ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -391,6 +400,7 @@ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" @@ -445,6 +455,7 @@ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", @@ -460,6 +471,7 @@ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -493,6 +505,16 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@buttercup/fetch": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@buttercup/fetch/-/fetch-0.2.1.tgz", @@ -1915,16 +1937,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -4414,29 +4426,35 @@ "vue": "^3.2.25" } }, - "node_modules/@vitest/coverage-istanbul": { + "node_modules/@vitest/coverage-v8": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-4.1.4.tgz", - "integrity": "sha512-Pyi4F8RnqU6hBGiIDhS/e8gVD4FRcUvZJ2AbFiIlmIxHlEIsKyCxGOqufCECobty/dXELcN8oIH4Gms3hVOCYA==", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.4.tgz", + "integrity": "sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.29.0", - "@istanbuljs/schema": "^0.1.3", - "@jridgewell/gen-mapping": "^0.3.13", - "@jridgewell/trace-mapping": "0.3.31", + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.1.4", + "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", + "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { + "@vitest/browser": "4.1.4", "vitest": "4.1.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, "node_modules/@vitest/expect": { @@ -4834,13 +4852,13 @@ } }, "node_modules/@vue/tsconfig": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.0.tgz", - "integrity": "sha512-RP+v9Cpbsk1ZVXltCHHkYBr7+624x6gcijJXVjIcsYk7JXqvIpRtMwU2ARLvWDhmy9ffdFYxhsfJnPztADBohQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", "dev": true, "license": "MIT", "peerDependencies": { - "typescript": "5.x", + "typescript": ">= 5.8", "vue": "^3.4.0" }, "peerDependenciesMeta": { @@ -5411,6 +5429,35 @@ "node": ">=18" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", + "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/ast-walker-scope": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", @@ -9153,6 +9200,7 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -11322,6 +11370,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^3.0.2" } @@ -18256,7 +18305,8 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/yaml": { "version": "2.8.2", diff --git a/package.json b/package.json index 1142a2b083c..c1f373db793 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,10 @@ "sass:watch": "sass --watch --load-path core/css core/css/ $(for cssdir in $(find apps -mindepth 2 -maxdepth 2 -name \"css\"); do if ! $(git check-ignore -q $cssdir); then printf \"$cssdir \"; fi; done)", "stylelint": "stylelint $(for appdir in $(ls apps); do if ! $(git check-ignore -q \"apps/$appdir\"); then printf \"'apps/$appdir/**/*.{scss,vue}' \"; fi; done) 'core/**/*.{scss,vue}'", "stylelint:fix": "npm run stylelint -- --fix", - "test": "build/demi.sh test", - "test:coverage": "build/demi.sh test:coverage", - "test:update-snapshots": "build/demi.sh test:update-snapshots", - "test:watch": "build/demi.sh --parallel test:watch", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "test:update-snapshots": "vitest run --update", + "test:watch": "vitest --watch", "watch": "build/demi.sh --parallel watch" }, "browserslist": [ @@ -77,9 +77,9 @@ "@testing-library/jest-dom": "^6.9.1", "@testing-library/vue": "^8.1.0", "@types/dockerode": "^4.0.1", - "@vitest/coverage-istanbul": "^4.1.4", + "@vitest/coverage-v8": "^4.1.4", "@vue/test-utils": "^2.4.6", - "@vue/tsconfig": "^0.9.0", + "@vue/tsconfig": "^0.9.1", "@zip.js/zip.js": "^2.8.26", "concurrently": "^9.2.1", "cypress": "^15.14.0", @@ -98,7 +98,7 @@ "sass": "^1.99.0", "stylelint": "^17.8.0", "vite": "^7.3.2", - "vitest": "^4.0.15" + "vitest": "^4.1.4" }, "engines": { "node": "^24.0.0", diff --git a/vitest.config.ts b/vitest.config.ts index 1ce29c6770d..84ab5fd1b26 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -5,9 +5,23 @@ import { defineConfig } from 'vitest/config' -// stub - for the moment see build/frontend/vitest.config.ts export default defineConfig({ test: { - projects: ['build/frontend*'], + projects: [ + 'build/frontend*', + ], + onUnhandledError(error) { + // TODO: remove when this is fixed: https://github.com/nextcloud-libraries/nextcloud-vue/issues/8090 + if (error.message.includes('`fallbackFocus` was specified but was not a node, or did not return a node')) { + return false + } + }, + }, + server: { + watch: { + ignored(path: string) { + return !/(\/|build\/frontend[^/]*\/)(apps|core)\/(src|tests)\//.test(path) + }, + }, }, })