05c4dd5076
Register process.once('beforeExit') in waitUntilExit() so TUI apps
that finish naturally (no explicit exit/unmount) clean up before the
event loop drains. Add stdout write barrier in resolveExit() to ensure
all output is flushed before settling the exit promise.
Update testing render helper to await the additional async tick
introduced by the write barrier so early-error detection still works.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vue-tui/testing
Test harness for @vue-tui/runtime.
Install
pnpm add -D @vue-tui/testing vue
Quickstart
import { defineComponent, h } from "vue";
import { test, expect } from "vitest";
import { render, flush } from "@vue-tui/testing";
import { Text } from "@vue-tui/runtime";
test("renders hello", async () => {
const App = defineComponent({ render: () => h(Text, null, "hello") });
const r = render(App);
await flush();
expect(r.lastFrame()).toContain("hello");
r.unmount();
});
API
render(app, { columns?, rows? })— mount in a fake-TTY environment, collect frames.flush()— await Vue's post-flush queue + Node's immediate queue.result.lastFrame()/result.frames— frame snapshots.result.stdin.write(data)— inject input that reachesuseInputhandlers.result.app— the underlyingTuiApp(use.waitUntilExit()if needed).result.unmount()/result.waitUntilExit()— convenience pass-throughs.