























@@ -207,13 +207,32 @@ function expectLoaderCallCount(count: number) {
207207expect(loadOpenClawPluginsMock).toHaveBeenCalledTimes(count);
208208}
209209210+function requireRecord(value: unknown): Record<string, unknown> {
211+expect(value).toBeTruthy();
212+expect(typeof value).toBe("object");
213+expect(Array.isArray(value)).toBe(false);
214+return value as Record<string, unknown>;
215+}
216+217+function requireLastCallFirstArg(
218+mock: { mock: { calls: readonly (readonly unknown[])[] } },
219+label: string,
220+): Record<string, unknown> {
221+const call = mock.mock.calls.at(-1);
222+expect(call, `${label} should have been called`).toBeTruthy();
223+return requireRecord(call?.[0]);
224+}
225+226+function requirePluginsConfig(params: Record<string, unknown>): Record<string, unknown> {
227+const config = requireRecord(params.config);
228+return requireRecord(config.plugins);
229+}
230+210231function expectScopedWebSearchCandidates(pluginIds: readonly string[]) {
211232expect(loadInstalledPluginManifestRegistryMock).toHaveBeenCalled();
212-expect(loadOpenClawPluginsMock).toHaveBeenCalledWith(
213-expect.objectContaining({
214-onlyPluginIds: [...pluginIds],
215-}),
216-);
233+expect(
234+requireLastCallFirstArg(loadOpenClawPluginsMock, "loadOpenClawPlugins").onlyPluginIds,
235+).toEqual([...pluginIds]);
217236}
218237219238function expectAutoEnabledWebSearchLoad(params: {
@@ -224,15 +243,9 @@ function expectAutoEnabledWebSearchLoad(params: {
224243config: params.rawConfig,
225244env: createWebSearchEnv(),
226245});
227-expect(loadOpenClawPluginsMock).toHaveBeenCalledWith(
228-expect.objectContaining({
229-config: expect.objectContaining({
230-plugins: expect.objectContaining({
231-allow: expect.arrayContaining([...params.expectedAllow]),
232-}),
233-}),
234-}),
235-);
246+const loaderParams = requireLastCallFirstArg(loadOpenClawPluginsMock, "loadOpenClawPlugins");
247+const plugins = requirePluginsConfig(loaderParams);
248+expect(plugins.allow).toEqual([...params.expectedAllow]);
236249}
237250238251function expectSnapshotLoaderCalls(params: {
@@ -505,17 +518,12 @@ describe("resolvePluginWebSearchProviders", () => {
505518506519expect(toRuntimeProviderKeys(providers)).toEqual(["brave:brave"]);
507520expectScopedWebSearchCandidates(["brave"]);
508-expect(loadOpenClawPluginsMock).toHaveBeenCalledWith(
509-expect.objectContaining({
510-config: expect.objectContaining({
511-plugins: expect.objectContaining({
512-allow: ["brave"],
513-bundledDiscovery: "allowlist",
514-entries: { brave: { enabled: true } },
515-}),
516-}),
517-}),
518-);
521+const loaderParams = requireLastCallFirstArg(loadOpenClawPluginsMock, "loadOpenClawPlugins");
522+expect(requirePluginsConfig(loaderParams)).toEqual({
523+allow: ["brave"],
524+bundledDiscovery: "allowlist",
525+entries: { brave: { enabled: true } },
526+});
519527});
520528521529it("uses the active registry workspace for candidate discovery and snapshot loads when workspaceDir is omitted", () => {
@@ -535,17 +543,14 @@ describe("resolvePluginWebSearchProviders", () => {
535543 env,
536544});
537545538-expect(loadInstalledPluginManifestRegistryMock).toHaveBeenCalledWith(
539-expect.objectContaining({
540-workspaceDir: "/tmp/runtime-workspace",
541-}),
542-);
543-expect(loadOpenClawPluginsMock).toHaveBeenCalledWith(
544-expect.objectContaining({
545-workspaceDir: "/tmp/runtime-workspace",
546-onlyPluginIds: ["brave"],
547-}),
546+const manifestParams = requireLastCallFirstArg(
547+loadInstalledPluginManifestRegistryMock,
548+"loadPluginManifestRegistryForInstalledIndex",
548549);
550+expect(manifestParams.workspaceDir).toBe("/tmp/runtime-workspace");
551+const loaderParams = requireLastCallFirstArg(loadOpenClawPluginsMock, "loadOpenClawPlugins");
552+expect(loaderParams.workspaceDir).toBe("/tmp/runtime-workspace");
553+expect(loaderParams.onlyPluginIds).toEqual(["brave"]);
549554});
550555it("reuses a compatible active registry for snapshot resolution when config is provided", () => {
551556const { env, rawConfig } = createActiveBraveRegistryFixture();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。