Тест Кабала в песочнице

Допустим, у меня есть три моих собственных пакета, 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

(Приведенный выше пример показывает, что должна быть также возможность указать только некоторые разделы пакета.)

Я понимаю, что это не очень вам помогает сейчас, но, по крайней мере, вы знаете, в каком направлении мы движемся.

Другие вопросы по тегам