























@@ -424,6 +424,52 @@ describe("scripts/test-extension.mjs", () => {
424424]);
425425});
426426427+it("counts tracked extension tests without walking extension directories", () => {
428+const output = execFileSync(
429+process.execPath,
430+[
431+"--input-type=module",
432+"--eval",
433+`
434+ import fs from "node:fs";
435+ import { syncBuiltinESMExports } from "node:module";
436+ const counts = { readdirSync: 0 };
437+ const originalReaddirSync = fs.readdirSync;
438+ fs.readdirSync = (...args) => {
439+ counts.readdirSync += 1;
440+ return originalReaddirSync(...args);
441+ };
442+ syncBuiltinESMExports();
443+ const { createExtensionTestShards, resolveExtensionBatchPlan } = await import("./scripts/lib/extension-test-plan.mjs");
444+ const extensionIds = ["matrix", "openai", "slack", "telegram"];
445+ const batch = resolveExtensionBatchPlan({ cwd: process.cwd(), extensionIds });
446+ const shards = createExtensionTestShards({ cwd: process.cwd(), extensionIds, shardCount: 2 });
447+ console.log(JSON.stringify({
448+ batchTests: batch.testFileCount,
449+ counts,
450+ shards: shards.length,
451+ shardTests: shards.reduce((total, shard) => total + shard.testFileCount, 0),
452+ }));
453+ `,
454+],
455+{
456+cwd: process.cwd(),
457+encoding: "utf8",
458+},
459+);
460+461+const payload = JSON.parse(output) as {
462+batchTests: number;
463+counts: { readdirSync: number };
464+shards: number;
465+shardTests: number;
466+};
467+expect(payload.batchTests).toBeGreaterThan(0);
468+expect(payload.shards).toBe(2);
469+expect(payload.shardTests).toBe(payload.batchTests);
470+expect(payload.counts.readdirSync).toBe(0);
471+});
472+427473it("balances extension test shards by estimated CI cost", () => {
428474const shards = createExtensionTestShards({
429475cwd: process.cwd(),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。