




















@@ -14,6 +14,22 @@ type CatalogEntryMeta = {
1414aliases?: string[];
1515};
161617+function createCatalogFixtureEnv(overrides: NodeJS.ProcessEnv = {}): NodeJS.ProcessEnv {
18+return {
19+ ...process.env,
20+OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE: "1",
21+OPENCLAW_DISABLE_PLUGIN_MANIFEST_CACHE: "1",
22+ ...overrides,
23+};
24+}
25+26+function createCatalogFallbackOnlyEnv(): NodeJS.ProcessEnv {
27+return createCatalogFixtureEnv({
28+OPENCLAW_DISABLE_BUNDLED_PLUGINS: "1",
29+OPENCLAW_BUNDLED_PLUGINS_DIR: "/nonexistent/bundled/plugins",
30+});
31+}
32+1733export function describeChannelCatalogEntryContract(params: {
1834channelId: string;
1935npmSpec: string;
@@ -44,13 +60,13 @@ export function describeBundledMetadataOnlyChannelCatalogContract(params: {
4460}) {
4561describe(`${params.pluginId} bundled metadata-only channel catalog contract`, () => {
4662it("includes the bundled metadata-only channel entry when the runtime entrypoint is omitted", () => {
47-const packageRoot = fs.mkdtempSync(
63+const workspaceDir = fs.mkdtempSync(
4864path.join(resolvePreferredOpenClawTmpDir(), "openclaw-bundled-catalog-"),
4965);
50-const bundledDir = path.join(packageRoot, "dist", "extensions", params.pluginId);
66+const bundledDir = path.join(workspaceDir, ".openclaw", "extensions", params.pluginId);
5167fs.mkdirSync(bundledDir, { recursive: true });
5268fs.writeFileSync(
53-path.join(packageRoot, "package.json"),
69+path.join(workspaceDir, "package.json"),
5470JSON.stringify({ name: "openclaw" }),
5571"utf8",
5672);
@@ -77,10 +93,8 @@ export function describeBundledMetadataOnlyChannelCatalogContract(params: {
7793);
78947995const entry = listChannelPluginCatalogEntries({
80-env: {
81- ...process.env,
82-OPENCLAW_BUNDLED_PLUGINS_DIR: path.join(packageRoot, "dist", "extensions"),
83-},
96+ workspaceDir,
97+env: createCatalogFixtureEnv({ OPENCLAW_DISABLE_BUNDLED_PLUGINS: "1" }),
8498}).find((item) => item.id === params.meta.id);
859986100expect(entry?.install.npmSpec).toBe(params.npmSpec);
@@ -123,10 +137,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: {
123137);
124138125139const entry = listChannelPluginCatalogEntries({
126-env: {
127- ...process.env,
128-OPENCLAW_BUNDLED_PLUGINS_DIR: "/nonexistent/bundled/plugins",
129-},
140+env: createCatalogFallbackOnlyEnv(),
130141officialCatalogPaths: [catalogPath],
131142}).find((item) => item.id === params.channelId);
132143@@ -202,10 +213,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: {
202213const entry = listChannelPluginCatalogEntries({
203214catalogPaths: [externalCatalogPath],
204215officialCatalogPaths: [officialCatalogPath],
205-env: {
206- ...process.env,
207-OPENCLAW_BUNDLED_PLUGINS_DIR: path.join(dir, "dist", "extensions"),
208-},
216+env: createCatalogFallbackOnlyEnv(),
209217}).find((item) => item.id === params.channelId);
210218211219expect(entry?.install.npmSpec).toBe(params.externalNpmSpec);
@@ -240,10 +248,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: {
240248const entry = listChannelPluginCatalogEntries({
241249catalogPaths: [catalogPath],
242250officialCatalogPaths: [],
243-env: {
244- ...process.env,
245-OPENCLAW_BUNDLED_PLUGINS_DIR: "/nonexistent/bundled/plugins",
246-},
251+env: createCatalogFallbackOnlyEnv(),
247252}).find((item) => item.id === params.channelId);
248253249254expect(entry?.installSource?.npm).toMatchObject({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。