#sandbox #utils #directory

cli-sandbox

帮助测试 CLI 的实用工具

4 个版本 (破坏性)

0.10.0 2023 年 5 月 23 日
0.9.0 2023 年 5 月 22 日
0.7.0 2023 年 5 月 21 日
0.6.1 2023 年 5 月 13 日
0.4.5 2023 年 5 月 13 日

#18#tests

Download history 3/week @ 2024-04-03

每月 74 次下载

MIT 许可证

33KB
350

cli-sandbox

cli-sandbox 是一个沙箱环境和测试实用工具,帮助您测试和调试 CLI 应用程序,灵感来自 Cargo 的 cargo-test-support

所有测试都获得自己的临时目录,在那里您可以创建文件、检查文件、测试程序与这些文件,并以各种方式检查程序的输出。

例如,如果您想检查您的 Python 到 Rust 编译器是否工作正确

use cli_sandbox::{project, WithStdout};
use std::error::Error;

#[test]
fn compiling() -> Result<(), Box<dyn Error>> {
    cli_sandbox::init(); // Initialize the sandbox
    let proj = project()?;                      // Create a project

    // Let's create a file, and put in there some Python.
    proj.new_file("my-program.py",
r#"def main():
    print("Hi! this is a test")

main()"#)?;

    let cmd = proj.command(["build"])?;         // Execute the command "<YOUR COMMAND> build". Cli-sandbox will automatically get your command.

    // Now, let's check that the transpiler created the file correctly.
    proj.check_file("my-program.rs",
r#"fn main() {
    println!("Hi! this is a test");
}

main()"#)?;

    // And that the command stdout and stderr are correct.

    cmd.with_stdout("File transpiled correctly! (`my-program.py` -> `my-program.rs`)");

    // If the stderr isn't empty, we'll panic.
    if !cmd.empty_stderr() {
        panic!("Something went wrong! stderr isn't empty");
    };
}

您还可以获取项目的路径(每次执行测试时都会更改,它们是临时的)。

安装

cargo add cli-sandbox --dev

使用方法

第一步是创建一个 Project。您可以使用 Project::new()project()。这将为您创建一个临时目录,您可以将所有测试文件放在其中。

从项目,您可以执行命令,进行 I/O 操作,甚至通过获取项目的路径(Project::path())手动操作。

查看 项目的文档 获取更多信息。

功能

  • 支持正则表达式来检查 stdoutstderr。 (特性:regex)
  • 所有输出都非常美观,归功于 pretty-assertionsbetter_panic。 (特性:pretty,也可以单独启用)
  • 微模糊功能 (特性:fuzz)
  • 测试 debugrelease 配置文件 (特性:devrelease)

贡献

查看 CONTRIBUTING.md 文件以获取有关如何贡献的一些指南。所有贡献都受到欢迎,任何大小的贡献者都欢迎,无论经验水平如何!

许可证

我们使用的是 MIT 许可证,更多信息请查看[LICENSE]文件。

依赖项

~5–15MB
~202K SLoC