testing - subcarpetas - que es ser recursivo
¿Cómo hacer pruebas recursivas de todas las cajas bajo un directorio? (4)
No puedo probarlo ahora, pero creo que puedes usar cargo test --all
para hacer eso.
Algunos proyectos incluyen múltiples cajas, lo que hace que sea una molestia ejecutar todas las pruebas de forma manual en cada una.
¿Hay una forma conveniente de realizar cargo test
manera recursiva?
Actualización: desde que se lanzó esta respuesta 1.15, se agregó una cargo test --all
, que comparará esto con un script personalizado.
Este shell-script ejecuta pruebas recursivamente en un repositorio git para todos los directorios que contienen un archivo Cargo.toml
(lo suficientemente fácil de editar para otro VCS).
- Sale en el primer error.
- Utiliza
nocapture
para que se muestre stdout
(depende de las preferencias personales, fácil de ajustar) . - Ejecuta pruebas con el conjunto
RUST_BACKTRACE
, para obtener un resultado más útil. - Crea y ejecuta en dos pasos separados
(solución para este error en 1.14 estable). -
CARGO_BIN
entornoCARGO_BIN
opcional para anular el comando de carga
(útil si desea usar un contenedor de carga como un constructor de carga fuera de la fuente ).
Guión:
#!/bin/bash
# exit on first error, see: http://.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
Gracias a la respuesta de @ набиячлэвэли, esta es una versión expandida.
Podría usar un script de shell. De acuerdo con esta respuesta , esto
find . -name Cargo.toml -printf ''%h/n''
Imprimirá los directorios que contienen Cargo.toml
, entonces, componer esto con el resto de las utilidades de shell estándar nos rinde
for f in $(find . -name Cargo.toml -printf ''%h/n'' | sort -u); do
pushd $f > /dev/null;
cargo test;
popd > /dev/null;
done
Que iterará sobre todos los directorios que contengan Cargo.toml
(una buena apuesta para los cajones) y ejecutará una cargo test
en ellos.