いくつかのプロジェクトには複数のクレートが含まれているため、手動ですべてのテストを実行するのは面倒です。ディレクトリ下のすべてのクレートを再帰的にテストするには?
再帰的に実行する便利な方法はありますかcargo test
?
いくつかのプロジェクトには複数のクレートが含まれているため、手動ですべてのテストを実行するのは面倒です。ディレクトリ下のすべてのクレートを再帰的にテストするには?
再帰的に実行する便利な方法はありますかcargo test
?
シェルスクリプトを使用できます。 this answerによると、この
find . -name Cargo.toml -printf '%h\n'
は、標準のシェルutilsパッケージの残りの部分でこれを構成することは、私たちにもたらし、Cargo.toml
を含むディレクトリをプリントアウトし、そうだろうCargo.toml
を含むすべてのディレクトリを反復処理するような
for f in $(find . -name Cargo.toml -printf '%h\n' | sort -u); do
pushd $f > /dev/null;
cargo test;
popd > /dev/null;
done
(クレートのための良い賭け)とその中に
cargo test
を実行します。
更新:この回答1.15が追加されたので、cargo test --all
を追加すると、カスタムスクリプトと比較されます。
このシェル・スクリプトは、(他のVCSのために編集しやすい十分な)Cargo.toml
ファイルを含むすべてのディレクトリのためのgitリポジトリに再帰的にテストを実行します。
nocapture
ですので、stdoutはRUST_BACKTRACE
を設定してテストを実行します。CARGO_BIN
貨物コマンドスクリプト:@набиячлэвэлиの答えに
#!/bin/bash
# exit on 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
おかげで、これは拡張バージョンです。
今はテストできませんが、cargo test --all
を使用してください。
このオプションは実際にはバージョン1.15では安定したRustに実際に着陸しました! – barjak
待っている人には良いことが起こります。 – Shepmaster
貨物作業スペース機能を使用できます。 This crateコレクションでは、Makefile
と組み合わせて使用します。これを使用して、各クレートを単独でコンパイルできます。
(ワークスペース機能は、共通の依存関係を複数回コンパイルしないのに役立ちます)
私は同じリポジトリに複数の木箱をバンドルしたいだけではないよ見ることがうれしいです。私は貨物がこれをより良くサポートしていないように見えることに驚いています。 –