Files
vue-tui/packages/testing
Yunfei He 05c4dd5076 feat: add beforeExit natural unmount + stdout write barrier
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>
2026-05-26 22:18:56 +08:00
..
2026-05-24 22:58:29 +08:00
2026-05-24 22:58:29 +08:00

@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 reaches useInput handlers.
  • result.app — the underlying TuiApp (use .waitUntilExit() if needed).
  • result.unmount() / result.waitUntilExit() — convenience pass-throughs.