Consolidate vitest CI & coverage (#33808)

* Consolidate modules vitest coverage

* Use vite-common as base for modules vitest config

* Make knip happier

* Fix coverage paths

* Place modules unit tests alongside src

* Switch to defineProject for better type safety

* Consolidate vitest CI & coverage

Kills off vite-common

* Update comment

* Update lockfile

* Fix shared-components vitest config

* Soften eslint config for tests in modules

* Run eslint on modules/playwright dir too

* Make tsc happy
This commit is contained in:
Michael Telatynski
2026-06-10 17:00:34 +01:00
committed by GitHub
parent 042ded86c7
commit e9a89d9872
34 changed files with 252 additions and 301 deletions
-2
View File
@@ -74,7 +74,6 @@
"@babel/preset-typescript": "^7.18.6",
"@electron/asar": "4.2.0",
"@electron/fuses": "^2.1.1",
"@element-hq/vite-common": "workspace:*",
"@playwright/test": "catalog:",
"@stylistic/eslint-plugin": "^5.0.0",
"@types/auto-launch": "^5.0.1",
@@ -84,7 +83,6 @@
"@types/pacote": "^11.1.1",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "catalog:",
"app-builder-lib": "26.15.1",
"chokidar": "^5.0.0",
"detect-libc": "^2.0.0",
+14 -7
View File
@@ -7,9 +7,13 @@ Please see LICENSE files in the repository root for full details.
import { expect, describe, it, beforeEach, vi } from "vitest";
import { fs as memfs, vol } from "memfs";
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";
import { getBuildConfig } from "./build-config.js";
const __dirname = dirname(fileURLToPath(import.meta.url));
vi.mock("node:fs", () => ({ default: memfs }));
beforeEach(() => {
@@ -19,13 +23,16 @@ beforeEach(() => {
describe("getBuildConfig", () => {
it("should read fields from package.json correctly", () => {
vol.fromJSON({
"package.json": JSON.stringify({
electron_appId: "app.id",
electron_protocol: "proto",
electron_windows_cert_sn: "subject.name",
}),
});
vol.fromJSON(
{
"../package.json": JSON.stringify({
electron_appId: "app.id",
electron_protocol: "proto",
electron_windows_cert_sn: "subject.name",
}),
},
__dirname,
);
const config = getBuildConfig();
expect(config.appId).toBe("app.id");
+8 -5
View File
@@ -7,10 +7,13 @@ Please see LICENSE files in the repository root for full details.
import { expect, describe, it, beforeEach, vi } from "vitest";
import { fs as memfs, vol } from "memfs";
import path from "node:path";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { getIconPath } from "./icon.js";
const __dirname = dirname(fileURLToPath(import.meta.url));
vi.mock("node:fs/promises", () => ({ default: memfs.promises }));
beforeEach(() => {
@@ -25,20 +28,20 @@ describe("getIconPath", () => {
"build/icon.png": "png",
"build/icon.ico": "ico",
},
"../webapp",
resolve(__dirname, "../webapp"),
);
});
it("should use .ico on Windows", async () => {
vi.spyOn(process, "platform", "get").mockReturnValue("win32");
await expect(getIconPath()).resolves.toEqual(path.resolve("../build/icon.ico"));
await expect(getIconPath()).resolves.toEqual(resolve(__dirname, "../build/icon.ico"));
});
it("should use .png on macOS", async () => {
vi.spyOn(process, "platform", "get").mockReturnValue("darwin");
await expect(getIconPath()).resolves.toEqual(path.resolve("../build/icon.png"));
await expect(getIconPath()).resolves.toEqual(resolve(__dirname, "../build/icon.png"));
});
it("should use .png on Linux", async () => {
vi.spyOn(process, "platform", "get").mockReturnValue("linux");
await expect(getIconPath()).resolves.toEqual(path.resolve("../build/icon.png"));
await expect(getIconPath()).resolves.toEqual(resolve(__dirname, "../build/icon.png"));
});
});
+9 -15
View File
@@ -5,19 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { defineConfig, mergeConfig } from "vitest/config";
import baseConfig from "@element-hq/vite-common/vite.config.js";
import { defineProject } from "vitest/config";
export default mergeConfig(
baseConfig,
defineConfig({
test: {
coverage: {
// The coverage report currently chokes on this file as it doesn't process it as TypeScript
exclude: ["src/preload.cts"],
},
include: ["src/**/*.test.ts"],
},
}),
true,
);
export default defineProject({
test: {
include: ["src/**/*.test.ts"],
environment: "node",
pool: "threads",
globals: false,
},
});