39 行
2.2 KiB
JavaScript
39 行
2.2 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { createRequire } from "node:module";
|
|
import { mkdirSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
import * as fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import vm from "node:vm";
|
|
import test from "node:test";
|
|
|
|
const require = createRequire(new URL("../../../client/package.json", import.meta.url));
|
|
const ts = require("typescript");
|
|
for (const configured of [false, true]) test(`截图输出按 spec/加载隔离,配置输出根=${configured}`, context => {
|
|
const root = mkdtempSync(path.join(os.tmpdir(), "hyb-visual-path-test-"));
|
|
context.after(() => rmSync(root, { recursive: true, force: true }));
|
|
mkdirSync(path.join(root, "client"));
|
|
const outputRoot = path.join(root, configured ? "report-visual" : "output/playwright");
|
|
const directories = [];
|
|
for (const [file, marker, output] of [
|
|
["internal-readiness-ui.spec.ts", "const WECOM_UA", "[SCREENSHOT_DIR]"],
|
|
["pc-finance-admin-visual-wave4.spec.ts", "const visualUser", "[outputDir, taskOutputDir]"],
|
|
]) {
|
|
const source = readFileSync(new URL(`../../../client/tests/e2e/${file}`, import.meta.url), "utf8");
|
|
assert.ok(source.includes(marker));
|
|
const prefix = source.slice(0, source.indexOf(marker));
|
|
assert.ok(!prefix.includes("07-18-small-team-internal-readiness"));
|
|
const script = ts.transpileModule(prefix + `\nglobalThis.observed = ${output};`, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022, esModuleInterop: true } }).outputText;
|
|
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
const sandbox = { exports: {}, process: { cwd: () => path.join(root, "client"), env: configured ? { QA_VISUAL_OUTPUT_DIR: outputRoot } : {} }, require: name => name === "node:fs" ? fs : name === "node:path" ? path : { test: { use() {} } } };
|
|
vm.runInNewContext(script, sandbox);
|
|
for (const directory of sandbox.observed) {
|
|
assert.ok(directory.startsWith(`${outputRoot}${path.sep}`));
|
|
assert.ok(!directory.includes("07-18-small-team-internal-readiness"));
|
|
assert.ok(!directories.includes(directory));
|
|
directories.push(directory);
|
|
}
|
|
}
|
|
}
|
|
});
|