
vyncint/termlens
Developer toolsЭта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал
Сквозное тестирование без головы для приложений CLI и TUI в Rust: реальные PTY, утверждения на экране, снимки и диффы экрана.
Обзор
терминал порождает вашу реальную двоичную систему в реальном псевдотерминале, выводит ее через эмулятор VT в сетку экрана в памяти и позволяет тесту ждать, утверждать против и снимать эту сетку — то, что увидит пользователь, а не байты, которые его произвели. Рецепт мгновенного тестирования Ratatui включает в себя пример терминальной линзы для тестирования скомпилированного приложения через PTY. Используйте его вместе со снимками TestBackend, чтобы охватить взаимодействия и поведение процесса. Встроенный тест виджета превращает вашу функцию в буфер. Он быстрый и точный, и он не может видеть ничего между рисунком и глазами пользователя. Терминал является вторым слоем, для небольшого количества сквозных потоков через реальную двоичную систему: — сырой режим и альтернативный экран вошли и ушли, курсор восстановился после q или паники, режимы приложения включили и выключили ли их. - рисунок коробки, цвета, широкие символы, поле пароля, которое скрыто, а не напечатано в чистом виде, бродячая печать!
Обзор (машинный перевод)
** Интеграционное тестирование для терминальных программ, как вы бы тестировать веб ** Терминалы порождают ваш реальный двоичный файл в реальном псевдотерминале, рендерах его вывод через эмулятор VT в сетку экрана в памяти и позволяет Тестируйте ожидание, утверждение против и снимите эту сетку — что бы сделал пользователь Смотри, а не байты, которые его произвели.
Рецепт мгновенного тестирования Рататуи
включает в себя пример терминов для тестирования скомпилированного приложения через PTY.
Используйте его вместе со снимками TestBackend, чтобы охватить взаимодействия и процессы.
поведение.
Почему
В процессе тестирования виджет превращает вашу функцию draw в буфер. Это
Он может быть быстрым и точным, и он не может видеть ничего между T2 и пользователем.
Глаза. Терминал является вторым слоем для небольшого количества сквозных потоков.
Через реальную двоичную систему:
** Терминальное состояние** — сырой режим и введённый и оставленный альтернативный экран,
Курсор восстанавливается после q или паники, режимы приложения поворачиваются
Включено ли оно и выключено ли оно.
** То, что на самом деле нарисовано** — рисунок коробки, цвета, широкие символы, а
Поле пароля, которое скрыто, а не напечатано в чистом виде
Эта страница переведена автоматически. Технические детали смотрите в оригинале.
README
Показан фрагмент оригинального README. Открыть оригинал.
termlens
Integration testing for terminal programs, the way you would test a web app. termlens spawns your real binary in a real pseudo-terminal, renders its output through a VT emulator into an in-memory screen grid, and lets a test wait on, assert against and snapshot that grid — what a user would see, not the bytes that produced it.
Ratatui’s snapshot-testing recipe
includes a termlens example for testing a compiled application through a PTY.
Use it alongside TestBackend snapshots to cover interactions and process
behaviour.
Why
An in-process widget test renders your draw function into a buffer. It is
fast and precise, and it cannot see anything between draw and the user’s
eyes. termlens is the second layer, for a small number of end-to-end flows
through the real binary:
- Terminal state — raw mode and the alternate screen entered and left,
the cursor restored after
qor a panic, the modes the application turned on and whether it turned them off. - What is actually drawn — box drawing, colours, wide characters, a
password field that is concealed rather than printed in clear, a stray
println!or panic message that never went through the framework. - Real input and real signals — keys, mouse and paste encoded exactly as
the terminal encodes them under the modes the application enabled; a
SIGWINCHthat the application must survive. - Behaviour that changes no cell — a repaint that drew nothing, a bell on a rejected key, an image that went out as pixels when it should have been text.
Every wait is deadline-bounded, and every failure carries the screen: a CI
log shows what the application was displaying, not assertion failed: false.
Quick start
cargo add termlens --dev
cargo add insta --dev # used by the snapshot assertions below
use std::time::Duration;
use termlens::{Key, Terminal};
#[test]
fn quits_from_the_main_screen() -> termlens::Result {
let mut t = Terminal::builder()
.size(80, 24)
.env_clear() // hermetic: no host env leaks in
.timeout(Duration::from_secs(5)) // every wait_* has this deadline
.spawn(env!("CARGO_BIN_EXE_myapp"))?;
// Wait for the app's ready marker, let the picture settle, then snapshot
// it with its styles — the three decisions every TUI snapshot needs.
termlens::assert_screen_snapshot!(t, after = |s| s.contains("Ready"));
Рекомендуемые инструменты
Попробуйте другой запрос или уберите фильтр.
Установка
npx skillfish add vyncint/termlens