2017-02-01 21 views
12

いくつかのプロジェクトには複数のクレートが含まれているため、手動ですべてのテストを実行するのは面倒です。ディレクトリ下のすべてのクレートを再帰的にテストするには?

再帰的に実行する便利な方法はありますかcargo test

+0

私は同じリポジトリに複数の木箱をバンドルしたいだけではないよ見ることがうれしいです。私は貨物がこれをより良くサポートしていないように見えることに驚いています。 –

答えて

6

シェルスクリプトを使用できます。 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を実行します。

6

更新:この回答1.15が追加されたので、cargo test --allを追加すると、カスタムスクリプトと比較されます。


このシェル・スクリプトは、(他のVCSのために編集しやすい十分な)Cargo.tomlファイルを含むすべてのディレクトリのためのgitリポジトリに再帰的にテストを実行します。

  • 最初のエラーで終了します。
  • 用途nocaptureですので、stdoutは
    です(個人の好みに応じて調整しやすい)です。
  • より有用な出力のために、RUST_BACKTRACEを設定してテストを実行します。
  • 2つの異なる手順でビルドして実行します
    (安定した1.14のthis bugの回避策)。
  • オプションCARGO_BIN貨物コマンド
    を無効にするための環境変数(cargo-out-of-source builderなどのカーゴラッパーを使用する場合に便利です)。

スクリプト:@набиячлэвэлиの答えに

#!/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 

おかげで、これは拡張バージョンです。

4

今はテストできませんが、cargo test --allを使用してください。

+0

このオプションは実際にはバージョン1.15では安定したRustに実際に着陸しました! – barjak

+0

待っている人には良いことが起こります。 – Shepmaster

1

貨物作業スペース機能を使用できます。 This crateコレクションでは、Makefileと組み合わせて使用​​します。これを使用して、各クレートを単独でコンパイルできます。

(ワークスペース機能は、共通の依存関係を複数回コンパイルしないのに役立ちます)

関連する問題