Некоторые проекты включают в себя несколько ящиков, что затрудняет выполнение всех тестов вручную в каждом.
Есть ли удобный способ рекурсивного запуска cargo test
?
Некоторые проекты включают в себя несколько ящиков, что затрудняет выполнение всех тестов вручную в каждом.
Есть ли удобный способ рекурсивного запуска cargo test
?
Вы можете использовать оболочку script. В соответствии с этим ответом этот
find . -name Cargo.toml -printf '%h\n'
Распечатайте каталоги, содержащие 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.toml
(хорошая ставка для ящиков) и запускать в них cargo test
.
Обновление: с момента добавления этого ответа было выпущено 1.15, добавив cargo test --all
, сравнивая это с пользовательским script.
Эта оболочка script запускает тесты рекурсивно в репозитории git для всех каталогов, содержащих файл Cargo.toml
(достаточно простой для редактирования для других VCS).
nocapture
, поэтому отображается stdout RUST_BACKTRACE
set, для более полезного вывода.CARGO_BIN
для переопределения команды груза Script:
#!/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
для этого.
Вы можете использовать функцию рабочего пространства. Эта коллекция crate использует ее в сочетании с Makefile
, которая может быть использована для компиляции каждого ящика самостоятельно.
(Функция рабочей области помогает не скомпилировать общие зависимости несколько раз)