определить пользовательскую конфигурацию в sbt

Я хочу установить другой набор параметров для запуска тестов на сервере интеграции и в среде разработки.

Допустим такой вариант:

testOptions := Seq(Tests.Filter(s => Seq("Spec", "Unit").exists(s.endsWith(_))))

Как можно изменить testOptions, чтобы он применялся только тогда, когда команда test имеет префикс с некоторой областью действия, например teamcity:test?

Я ожидаю, что testOptions будет изменен с аналогичным синтаксисом:

testOptions in Teamcity := ...

Я также хотел бы знать, как определить пользовательскую область, предпочтительно в простой сборке *.sbt, а не в сборке project/*.scala.


person coubeatczech    schedule 13.09.2013    source источник


Ответы (1)


Область действия может быть проектом, конфигурацией или задачей. В этом случае, я думаю, вы хотите определить пользовательскую конфигурацию.

используя егоНастройки

Уже есть встроенная конфигурация под названием IntegrationTest. Вы можете определить его в определении сборки, написав:

Defaults.itSettings

Это будет использовать совершенно другую настройку, чем обычные тесты, включая тестовый код (входит в src/it/scala/) и библиотеки, поэтому это может быть не то, что вам нужно.

определение собственной конфигурации

Используя sbt 0.13, вы можете определить пользовательскую конфигурацию следующим образом в build.sbt:

val TeamCity = config("teamcity") extend(Test)

val root = project.in(file(".")).
  configs(TeamCity).
  settings(/* your stuff here */, ...) 

определение teamcity:test

Теперь вам нужно выяснить, как определить teamcity:test.

Редактировать: Марк Харра указал мне, что для этого есть документация. См. Дополнительные тестовые конфигурации с общим источники.

Альтернативой добавлению отдельных наборов тестовых исходников (и компиляций) является совместное использование исходников. При таком подходе исходники компилируются вместе с использованием одного и того же пути к классам и вместе упаковываются.

собрать все это вместе

val TeamCity = config("teamcity") extend(Test)

val root = project.in(file(".")).
  configs(TeamCity).
  settings( 
    name := "helloworld",
    libraryDependencies ++= Seq(
      "org.specs2" %% "specs2" % "2.2" % "test"
    )
  ).
  settings(inConfig(TeamCity)(Defaults.testTasks ++ Seq(
    testOptions := Seq(Tests.Argument("nocolor"))
  )): _*)

При запуске teamcity:test выходные данные Specs2 отображаются бесцветными.

person Eugene Yokota    schedule 13.09.2013
comment
Я делаю, как вы говорите, но добавление testOptions in AsyncTest := Seq(Tests.Filter(s => s.contains("Async"))) к настройкам inConfig по-прежнему запускает весь набор тестов async:test ... Также, если я добавляю postLinkJSEnv in AsyncTest := new PhantomJSEnv(autoExit = false), он запускается с PhantomJSEnv по умолчанию... Что такое второй параметр метода inConfig? - person lisak; 18.11.2014
comment
@lisak похоже, что это ошибка: github.com/sbt/sbt/issues/2340 - person ov7a; 05.06.2019