#!/bin/bash
# exit on the first error, see: http://stackoverflow.com/a/185900/432509
error() {
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
if [[ -n "$message" ]] ; then
echo "Error on or near line ${parent_lineno}: ${message}; exiting with status ${code}"
else
echo "Error on or near line ${parent_lineno}; exiting with status ${code}"
fi
exit "${code}"
}
trap 'error ${LINENO}' ERR
# done with trap
# Support cargo command override.
if [[ -z $CARGO_BIN ]]; then
CARGO_BIN=cargo
fi
# toplevel git repo
ROOT=$(git rev-parse --show-toplevel)
for cargo_dir in $(find "$ROOT" -name Cargo.toml -printf '%h\n'); do
echo "Running tests in: $cargo_dir"
pushd "$cargo_dir"
RUST_BACKTRACE=0 $CARGO_BIN test --no-run
RUST_BACKTRACE=1 $CARGO_BIN test -- --nocapture
popd
done
4条答案
按热度按时间jecbmhm31#
更新:由于添加此答案1.15已发布,添加
cargo test --all
,将与自定义脚本进行比较。这个shell脚本在git存储库上递归地运行包含
Cargo.toml
文件的所有目录的测试(对于其他VCS来说很容易编辑)。nocapture
以显示标准输出RUST_BACKTRACE
集运行测试,以获得更有用的输出。CARGO_BIN
环境变量,用于覆盖cargo命令脚本:
dtcbnfnu2#
您可以使用shell脚本。根据this answer,这
将打印出包含
Cargo.toml
的目录,因此,将其与其余的标准shell utils组合在一起将产生它将遍历所有包含
Cargo.toml
(对于crates来说是个不错的选择)的目录,并在其中运行cargo test
。lnvxswe23#
我现在不能测试它,但我相信你可以用
cargo test --all
来做。f2uvfpb94#
您可以使用货物工作区功能。This crate集合将其与
Makefile
结合使用,Makefile
可用于独立编译每个crate。(The工作区功能有助于避免多次编译公共依赖项)