Use renderHook to test Solid hooks or primitives. Unlike component rendering, renderHook does not provide a container, baseElement, or DOM queries in its return value because reactive state does not require a DOM element to run.
Return Values:
result: The result of the hook.owner: The Owner object, which can be used with runWithOwner if required.cleanup: A function to manually trigger cleanup (though this is called automatically).
Warning: If using a wrapper with renderHook, ensure the wrapper always returns props.children. If the wrapper uses asynchronous context (like <Show>), failing to return children synchronously may result in the hook receiving undefined.
// Signature
function renderHook<Args extends any[], Result>(
hook: (...args: Args) => Result,
options: {
initialProps?: Args,
wrapper?: Component<{ children: JSX.Element }
}
) => {
result: Result;
owner: Owner | null;
cleanup: () => void;
}
// Example usage
const { result } = renderHook(createResult);
expect(result).toBe(true);