У меня есть грузовой проект с несколькими рабочими пространствами:
cli/
server/
test/
Cargo.toml
В родительском Cargo.toml
[workspace]
members = [
"server",
"cli",
"tests",
]
resolver = "1"
В рабочей области test
есть куча интеграционных тестов, которые зависят от сборки cli
крейта. Итак, я просто хочу запустить cargo test
, чтобы запустить все мои тесты, которые зависят от созданного cli
исполняемого файла. Но теперь это терпит неудачу:
test tests::should_output_help ... FAILED
failures:
---- tests::should_output_help stdout ----
Error: Cause: Cargo command not found: /Users/l3r8y/code/fakehub/target/debug/cli
Но если я поставлю cargo build
перед тестами, все будет хорошо. Итак, вопрос: можно ли cargo test
построить cli
создавать и запускать тесты только после того, как cli
собрано?
Cargo имеет специальную поддержку для тестов конкретного пакета, получающего доступ к двоичным файлам из этого пакета. В нем пока нет ничего для использования бинарников из отдельного пакета (это артефактные зависимости , которые еще не реализованы). Поэтому:
test/
в cli/tests/
(место проведения интеграционных тестов для пакета cli
).env!("CARGO_BIN_EXE_cli")
в качестве пути к выполняемой команде. Эта переменная среды автоматически устанавливается при компиляции или запуске теста с указанием пути к каждому двоичному файлу в одном пакете. (Документы)
Отвечает ли это на ваш вопрос? Как запустить основной бинарный файл, а затем запустить тесты на его основе в Rust?