Test

@textjs/app/testing ile uygulamaları ekran dışında render edin, tuşlara basın ve kareleri doğrulayın.

@textjs/app/testing (veya @textjs/react/testing) uygulamanızı ekran dışında render eder, tuşlara basar ve kareyi metin olarak döndürür. Testler tarayıcı veya DevTools olmadan çalışır.

counter.test.tsxtsx
import { afterEach, expect, test } from "bun:test";import { cleanup, render } from "@textjs/app/testing";import { Counter } from "./counter";afterEach(cleanup);test("counts up", async () => {  const app = await render(<Counter />, { cols: 40, rows: 6 });  await app.press("up up");  expect(app.lastFrame()).toContain("count = 2");});

Bun, Vitest ve Jest dahil, async testleri destekleyen her test çalıştırıcısıyla çalışır.

Render etme

MetotAçıklama
render(el, { cols, rows, theme })Ekran dışında bağlama (varsayılan 80×24)
lastFrame()Düz metin olarak kare
lines()Satır dizisi olarak kare
framesŞimdiye kadarki tüm farklı kareler
toAnsi()Anlık görüntüler için Truecolor ANSI
cell(x, y){ char, fg, bg, attrs }
locate(text)İlk eşleşmenin { x, y } koordinatları
rerender(el) / unmount()Güncelleme veya kaldırma

renderToString(el, options) bir kez render eder ve metni döndürür.

Girdi

await app.press("down");await app.press("ctrl+k");      // modifiersawait app.press("g g");         // a sequenceawait app.press("G");           // Shift+Gawait app.type("hello\n");      // one key per character, \n is Enterawait app.paste("multi\nline");await app.wheel(3);await app.resize(120, 36);

Her çağrı act() içinde çalışır ve oluşan kareleri işler; böylece bir sonraki doğrulama güncellemeyi görür.

Zaman

await app.wait(300);                    // real time passes, then frames flushawait app.waitForText("Deployed");      // poll until the frame contains itawait app.waitFor(() => expect(saved).toBe(true), { timeout: 2000 });

Animasyonlar, yükleme göstergeleri ve geçici bildirimler gerçek zamanlayıcılar kullanır; bu nedenle bunları gözlemlemenin güvenilir yolu wait ve waitFor kullanmaktır.

Anlık görüntüler

expect(app.lastFrame()).toMatchSnapshot();expect(app.toAnsi()).toMatchSnapshot(); // colors too

Karelerin sağındaki ve altındaki boşluklar kırpılır; böylece anlık görüntüler boşluklar nedeniyle değişmez.

Bu sayfayı GitHub’da düzenle