view-test-utils.tsx

1.1 KB · raw

1import type { JSX } from "solid-js";2import { render } from "solid-js/web";34export function renderView(view: JSX.Element | (() => JSX.Element)) {5  const container = document.createElement("div");6  document.body.appendChild(container);7  const dispose = render(() => (typeof view === "function" ? view() : view), container);8  return {9    container,10    dispose: () => {11      dispose();12      container.remove();13    },14  };15}1617export async function flushView(): Promise<void> {18  await Promise.resolve();19  await new Promise((resolve) => window.setTimeout(resolve, 0));20  await Promise.resolve();21}2223export function inputText(24  element: HTMLInputElement | HTMLTextAreaElement,25  value: string26): void {27  element.value = value;28  element.dispatchEvent(new Event("input", { bubbles: true }));29}3031export function changeSelect(32  element: HTMLSelectElement,33  value: string34): void {35  element.value = value;36  element.dispatchEvent(new Event("change", { bubbles: true }));37}3839export function pressEnter(element: HTMLElement): void {40  element.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: "Enter" }));41}