Skip to content

Test helpers

import { mountWidgetFixture, cycleWidgetFixture, triggerFixture } from "mountly/test";

mountly/test is a small test-only surface for the widget contract. Reach for it when you write adapter tests or verify a custom widget module without running the full on-demand feature lifecycle.

mountWidgetFixture(widget, props?, container?)

Section titled “mountWidgetFixture(widget, props?, container?)”
const fixture = await mountWidgetFixture(widget, { label: "ready" });
expect(fixture.container.textContent).toContain("ready");
await fixture.unmount();
fixture.container.remove();

If no container is provided, the helper creates one and appends it to document.body.

const result = await cycleWidgetFixture(widget, { label: "ready" });
expect(result.firstText).toContain("ready");
expect(result.afterUnmountText).toBe("");
expect(result.secondText).toContain("ready");

This catches common contract bugs: unmount() leaving DOM behind, second mount() failing, or shadow-root content not being readable in tests.

const button = document.createElement("button");
const trigger = triggerFixture({ type: "click", element: button, once: true }, () => calls++);
trigger.fire(new MouseEvent("click", { bubbles: true }));
trigger.cleanup();

This wraps the same setupTrigger() primitive used by Mountly features, so tests exercise real trigger behavior without a full feature module.

These helpers stay small on purpose. For end-to-end lifecycle tests, use createOnDemandFeature() and Playwright. For framework adapter tests, use these helpers to keep the fixture short and focused.