Files
omniai-web/scripts/run-unit-tests.mjs
T
stringadmin f322679d4a
Web Quality / verify (push) Has been cancelled
test: add web quality gates
2026-06-09 11:34:56 +08:00

56 lines
1.6 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
import process from "node:process";
import { createServer } from "vite";
const repoRoot = process.cwd();
function normalizePath(value) {
return value.replace(/\\/g, "/");
}
function findTestFiles(dir) {
const result = [];
if (!fs.existsSync(dir)) return result;
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
if (entry.name === "node_modules" || entry.name === "dist") continue;
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
result.push(...findTestFiles(fullPath));
continue;
}
if (/\.test\.tsx?$/.test(entry.name)) result.push(fullPath);
}
return result.sort();
}
const server = await createServer({
configFile: path.join(repoRoot, "vite.config.ts"),
appType: "custom",
logLevel: "silent",
server: { middlewareMode: true },
});
try {
const harness = await server.ssrLoadModule("/src/test/testHarness");
const testFiles = findTestFiles(path.join(repoRoot, "src"));
if (testFiles.length === 0) {
console.error("No test files found.");
process.exitCode = 1;
} else {
console.log(`Running ${testFiles.length} test files`);
for (const file of testFiles) {
const modulePath = `/${normalizePath(path.relative(repoRoot, file))}`;
await server.ssrLoadModule(modulePath);
}
const result = await harness.runRegisteredTests();
console.log(`Unit test result: ${result.passed}/${result.total} passed`);
if (result.failed > 0) process.exitCode = 1;
}
} finally {
await server.close();
}