7个不稳定版本
0.4.0-beta.1 | 2024年3月3日 |
---|---|
0.3.0 | 2023年6月3日 |
0.3.0-beta.2 | 2023年4月29日 |
0.3.0-beta.1 | 2023年1月19日 |
0.1.0 | 2021年6月1日 |
#19 in 可视化
554 每月下载量
用于 4 crates
330KB
7.5K SLoC
CLI / REPL应用的捕获和快照测试
此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快照
带有滚动动画和窗口框架的相同示例快照
局限性
- 终端着色仅与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应用程序进行快照测试。- 像
termtosvg
和Asciinema这样的工具允许记录终端会话并将其保存为SVG。这些工具的输出本质上是动态的(例如,导致动画SVG),这个crate有意选择了一个更简单的静态格式,这使得快照测试更容易。
许可证
根据您的选择,许可为Apache许可证版本2.0或MIT许可证。
除非您明确声明,否则您提交给term-transcript
的任何有意贡献,根据Apache-2.0许可证定义,应如上所述双重许可,不附加任何其他条款或条件。
依赖关系
~0.7-9MB
~72K SLoC