#svg #output #template-engine #transcript #repl #terminal #image

term-transcript

CLI / REPL应用的快照和快照测试

7个不稳定版本

0.4.0-beta.12024年3月3日
0.3.0 2023年6月3日
0.3.0-beta.22023年4月29日
0.3.0-beta.12023年1月19日
0.1.0 2021年6月1日

#19 in 可视化

Download history 141/week @ 2024-04-05 72/week @ 2024-04-12 122/week @ 2024-04-19 201/week @ 2024-04-26 94/week @ 2024-05-03 91/week @ 2024-05-10 70/week @ 2024-05-17 134/week @ 2024-05-24 120/week @ 2024-05-31 82/week @ 2024-06-07 75/week @ 2024-06-14 74/week @ 2024-06-21 87/week @ 2024-06-28 102/week @ 2024-07-05 74/week @ 2024-07-12 283/week @ 2024-07-19

554 每月下载量
用于 4 crates

MIT/Apache

330KB
7.5K SLoC

CLI / REPL应用的捕获和快照测试

Build Status License: MIT OR Apache-2.0 rust 1.70+ required

文档: Docs.rs crate docs (master)

此crate允许您

  • 创建与终端交互的记录,同时捕获输出文本和ANSI兼容的颜色信息
  • 将这些记录保存为SVG格式,以便它们可以轻松嵌入到HTML / Markdown文档中。可以通过Handlebars模板引擎自定义渲染逻辑;因此,除了SVG以外的其他输出格式(例如HTML)也是可能的。有关自定义模板的介绍,请参阅crate文档
  • 解析SVG中的记录。
  • 测试解析的记录是否实际上对应于终端输出(文本或文本+颜色)。

主要用例是轻松创建和维护CLI / REPL应用的端到端测试。此类测试可以嵌入到readme文件中。

用法

将此添加到您的Crate.toml

[dependencies]
term-transcript = "0.4.0-beta.1"

用法示例

use term_transcript::{
    svg::{Template, TemplateOptions}, ShellOptions, Transcript, UserInput,
};
use std::str;

let transcript = Transcript::from_inputs(
    &mut ShellOptions::default(),
    vec![UserInput::command(r#"echo "Hello world!""#)],
)?;
let mut writer = vec![];
// ^ Any `std::io::Write` implementation will do, such as a `File`.
Template::new(TemplateOptions::default()).render(&transcript, &mut writer)?;
println!("{}", str::from_utf8(&writer)?);
Ok::<_, anyhow::Error>(())

在crate文档和常见问题解答中查看更多示例和一些提示和故障排除建议。

CLI应用

大多数库功能都打包在一个CLI二进制文件中,允许您在不了解Rust的情况下使用该库。请参阅二进制文档以获取安装和使用指南。

快照示例

本crate生成的《rainbow》示例的SVG快照

Snapshot of rainbow example

带有滚动动画和窗口框架的相同示例快照

Animated snapshot of rainbow example

局限性

  • 终端着色仅与ANSI转义码兼容。(由于现在即使在Windows上也支持ANSI转义码,这不应该是一个重大问题。)
  • 除了SGR之外的ANSI转义序列要么被丢弃(在CSI序列的情况下),要么导致错误。
  • 默认情况下,该crate公开了通过OS管道执行捕获的API。在这种情况下没有模拟终端,依赖于isatty检查或获取终端大小的程序可能会产生与在实际shell中启动时不同的输出(没有着色,没有换行等)。
  • 可以使用portable-pty crate功能从伪终端(PTY)捕获输出。然而,由于大多数转义序列都被丢弃,这仍然不是捕获复杂输出(例如,移动光标的输出)的好选项。
  • Windows的PTY支持不太稳定。它需要较新的Windows版本(2018年10月或更新的Windows 10),并且即使对于较新版本,也可能工作不正确。

替代方案/类似工具

  • insta是一个通用的快照测试库,总体上很棒,但“有点”太底层,不适合端到端CLI测试。
  • rexpect允许通过在测试中对它们进行脚本交互来测试CLI/REPL应用程序。它仅在Unix上工作。
  • trybuild测试特定程序的输出快照(Rust编译器)。
  • trycmd使用基于文本的格式对CLI应用程序进行快照测试。
  • termtosvgAsciinema这样的工具允许记录终端会话并将其保存为SVG。这些工具的输出本质上是动态的(例如,导致动画SVG),这个crate有意选择了一个更简单的静态格式,这使得快照测试更容易。

许可证

根据您的选择,许可为Apache许可证版本2.0MIT许可证

除非您明确声明,否则您提交给term-transcript的任何有意贡献,根据Apache-2.0许可证定义,应如上所述双重许可,不附加任何其他条款或条件。

依赖关系

~0.7-9MB
~72K SLoC