Тест Кабала в песочнице
Допустим, у меня есть три моих собственных пакета, A B & C, с зависимостями от множества дополнительных пакетов в Hackage. Я использую клику 1.18.
- C зависит от A & B.
- B зависит от A.
- У A & B есть тестовые наборы.
Я установил песочницу так:
cd /path/to/sandbox
cabal sandbox init
cabal sandbox add-source /path/to/A
cabal sandbox add-source /path/to/B
cabal sandbox add-source /path/to/C
Я хочу собрать все пакеты, запустить все тестовые наборы на моих пакетах, но не пакеты зависимостей, показывая полный тестовый вывод. Какой лучший способ сделать это?
Опция 1
cd /path/to/sandbox
cabal install --enable-tests A B C
Проблемы:
- Там нет способа пройти
--show-details=always
вcabal install
, - Результаты теста скрыты в файле журнала и не отображаются.
- Если пользователь случайно сделал
cabal install A
ранее, A не будет восстановлен, и тесты не будут запущены.
Вариант 2
cd /path/to/A
cabal sandbox init --sandbox=/path/to/sandbox/.cabal-sandbox
cd /path/to/B
cabal sandbox init --sandbox=/path/to/sandbox/.cabal-sandbox
cd /path/to/A
cabal configure --enable-tests
cabal test --show-details=always
cd /path/to/B
cabal configure --enable-tests
cabal test --show-details=always
cabal install C
Проблемы:
- Это приводит к ненужной перестройке библиотек A и B.
Вариант 3
В песочнице cabal.config
, добавьте строку tests: True
,
Проблемы:
- Это приведет к запуску тестов для всех зависимых пакетов от Hackage, что очень медленно и в некоторых случаях дает сбой.
1 ответ
Cabal действительно не хватает функциональности здесь. Мой план состоит в том, чтобы обобщить клику, чтобы у нее было меньше (или нет) концепции "текущего пакета". Сейчас многие команды предполагают, что вы находитесь в каталоге с файлом.cabal и хотите что-то сделать с этим пакетом. Как вы видели, это не так часто для больших проектов с несколькими пакетами.
Я хочу, чтобы клика взяла список целей для большинства команд, таких как build
, test
, bench
и т. д. Вы можете запускать тесты из нескольких пакетов:
cabal test --show-details=always \
pkg-dir1:some-test1 pkg-dir1:some-test2 pkg-dir2
(Приведенный выше пример показывает, что должна быть также возможность указать только некоторые разделы пакета.)
Я понимаю, что это не очень вам помогает сейчас, но, по крайней мере, вы знаете, в каком направлении мы движемся.