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

Допустим, у меня есть три моих собственных пакета, A B и C, с зависимостями от множества дополнительных пакетов в Hackage. Я использую Cabal 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, что очень медленно и в некоторых случаях дает сбой.

person Ashley Yakeley    schedule 13.08.2014    source источник
comment
Ваш лучший вариант сегодня - создать по одной песочнице для каждого пакета, добавить deps каждого пакета в отдельную песочницу, а затем войти в каждую песочницу и запустить тесты с cabal test.   -  person tibbe    schedule 13.08.2014
comment
Это несколько неудобно, поскольку на самом деле мы используем песочницы в качестве разновидностей сборки, с включенной / выключенной оптимизацией и другими флагами и т. Д.   -  person Ashley Yakeley    schedule 14.08.2014


Ответы (1)


Кабалу здесь действительно не хватает функциональности. Мой план состоит в том, чтобы обобщить Кабалу, чтобы у нее было меньше (или не было) концепции «текущего пакета». Сейчас многие команды предполагают, что вы находитесь в каталоге с файлом .cabal и хотите что-то сделать с этим пакетом. Как вы видели, это не так часто случается с большими проектами, состоящими из нескольких пакетов.

Я хочу, чтобы Cabal взяла список целей для большинства команд, таких как build, test, bench и т. Д. Вы можете запускать тесты из нескольких пакетов с помощью

cabal test --show-details=always \
  pkg-dir1:some-test1 pkg-dir1:some-test2 pkg-dir2

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

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

person tibbe    schedule 13.08.2014