1 个不稳定版本
0.1.0 | 2024 年 4 月 21 日 |
---|
#283 在 测试
49KB
1K SLoC
anytest
在终端运行任何测试。
许多测试框架允许运行单个测试,但它们都使用不同的格式。大多数都需要构建相当复杂的查询,这些查询难以输入和记忆。此工具旨在通过仅指定文件和行号(遵循 RSpec/ExUnit/ESpec 的方式)来提供运行单个测试的统一方式。该工具深受出色的 vim-test 插件的启发。
目前,以下测试框架受到支持(更多即将推出)
语言 | 测试框架 | 标识符 |
---|---|---|
Elixir | ESpec, ExUnit | espec , exunit |
JavaScript | Jest | jest |
Python | pytest | pytest |
Ruby | RSpec | rspec |
Rust | Cargotest | cargotest |
Zig | Zigtest | zigtest |
您可以随时 提交一个有关测试框架的问题,因为那些测试框架将首先添加。
安装
目前,anytest
通过 crates.io 分发,因此需要 Rust 来安装它。要安装 Rust,请遵循 官方 Rust 网站 上的说明。
要从源代码构建 anytest
,请使用
cargo install anytest
用法
运行 anytest <文件>:<行>
就这么简单
anytest tests/test_rust.rs:10
该工具支持以下范围
suite
- 运行整个测试套件file
- 运行文件中的所有测试line
- 运行指定行上的测试
当路径指定行号时(例如 anytest tests/test_rust.rs:10
),作用域自动设置为 line
。当路径未指定行号时(例如 anytest tests/test_rust.rs
),作用域自动设置为 file
。
可以使用 --scope
/-s
标志显式设置作用域
anytest tests/test_rust.rs:10 -s file
默认情况下,anytest
使用当前工作目录作为根目录。可以使用 --root
/-r
标志显式设置根目录
anytest anytest-cli/tests/test_rust.rs:10 -r anytest-cli
指定根目录后,测试路径可以是相对于根目录的(例如 anytest tests/test_rust.rs:10 -r anytest-cli
)或相对于当前工作目录的(例如 anytest anytest-cli/tests/test_rust.rs:10 -r anytest-cli
)。
要使用干运行模式运行工具,请使用 --dry-run
/ 标志
anytest tests/test_rust.rs:10 --dry-run
要查看所有可用选项的列表,请运行
anytest --help
与 Zed 一起使用
尽管 anytest
是一个独立工具,但其主要驱动力是与其一起使用 Zed。目前,Zed 的扩展支持有限,因此将 anytest
与 Zed 集成的唯一方法是使用 Zed 任务。
仓库中包含一个 示例 tasks.json
文件,可以使用以下命令将其复制到 Zed 配置目录:
wget https://raw.githubusercontent.com/timfjord/anytest-cli/main/examples/tasks.json -O ~/.config/zed/tasks.json -nc
请注意,上述命令不会覆盖现有的 tasks.json
文件。要覆盖现有文件,请移除 -nc
标志。
设置好任务后,可以从命令面板中选择 task: spawn
命令,或添加快捷键来运行测试。
[
{
"context": "Workspace",
"bindings": {
"cmd-j cmd-s": ["task::Spawn", { "task_name": "anytest: test suite" }],
"cmd-j cmd-f": ["task::Spawn", { "task_name": "anytest: test file" }],
"cmd-j cmd-l": ["task::Spawn", { "task_name": "anytest: test line" }]
}
}
]
与其他 crate 一起使用
anytest
还可以作为库 crate 使用,在其他 Rust 项目中。
目前,它公开了用于给定上下文的 build_command
函数,该函数构建了一个 std::process::Command
。有关更多详细信息,请参阅 tests/test_api.rs。
use anytest::{Context, Scope};
let context = Context::new(
Some("tests/fixtures/cargotest/crate"),
"tests/integration_test.rs",
Some(3),
Some(Scope::Line),
)
.unwrap();
let command = anytest::build_command(&context).unwrap();
assert_eq!(command.get_program(), "cargo");
assert_eq!(
command
.get_args()
.map(|arg| arg.to_str().unwrap())
.collect::<Vec<_>>(),
vec![
"test",
"--test",
"integration_test",
"it_adds_two",
"--",
"--exact"
]
);
贡献
添加新的测试框架最简单的方法是,在 AnyTest 仓库 或 vim-test 仓库 中找到它,并尝试进行适配。还需要对测试框架进行测试。测试和固定值可以在 AnyTest 仓库 或 vim-test 仓库 中找到。
致谢
anytest
严重受到 vim-test 插件的启发,因此所有的赞誉都归功于这个出色的 Vim 插件的作者和维护者。
依赖关系
~5–15MB
~205K SLoC