@gluonjs/test-utils


@gluonjs/test-utils / packages/test-utils/src/ssr / HydrateSsrFixtureOptions

Interface: HydrateSsrFixtureOptions<Hydrated>

Type Parameters

Hydrated

Hydrated

Properties

attachTo?

readonly optional attachTo?: Element


dispose?

readonly optional dispose?: (hydrated) => void | PromiseLike<void>

Parameters

hydrated

Hydrated

Returns

void | PromiseLike<void>


document?

readonly optional document?: Document


hydrate

readonly hydrate: (context) => Promise<Hydrated>

Parameters

context

HydrationFixtureContext

Returns

Promise<Hydrated>


name?

readonly optional name?: string

Example

Provide the public application hydration and disposal callbacks used by a real-document SSR fixture:

ts
import type { SsrRequestResult } from '@gluonjs/ssr';
import {
  activeSsrFixtureNames,
  assertNoSsrFixtureLeaks,
  cleanupSsrFixtures,
  hydrateSsrFixture,
  renderSsrFixture,
  type HydratedSsrFixture,
  type HydrateSsrFixtureOptions,
  type HydrationFixtureContext,
  type RenderSsrFixtureOptions,
  type SsrFixture,
} from '@gluonjs/test-utils/ssr';

async function verifyShopRequest(render: () => Promise<SsrRequestResult>) {
  const renderOptions = { name: 'shop-product' } satisfies RenderSsrFixtureOptions;
  const server: SsrFixture = await renderSsrFixture(render, renderOptions);
  const options = {
    hydrate: async (context: HydrationFixtureContext) => ({
      retained: context.container.querySelector('#product-title') !== null,
    }),
    dispose: () => undefined,
  } satisfies HydrateSsrFixtureOptions<{ retained: boolean }>;
  const fixture: HydratedSsrFixture<{ retained: boolean }> = await hydrateSsrFixture(server, options);
  console.log(server.contains('Orbit Lamp'), fixture.hydrated.retained, activeSsrFixtureNames());
  await fixture.cleanup();
  await cleanupSsrFixtures();
  assertNoSsrFixtureLeaks();
}
void verifyShopRequest;