Как прикрепить пользовательское задание для выполнения перед тестовым заданием в sbt? - PullRequest
18 голосов
/ 19 декабря 2011

Я использую SBT с Play Framework.

Я создал пользовательский TaskKey для запуска тестов JavaScript в моем проекте:

import sbt._
import sbt.Process._
import PlayProject._

object ApplicationBuild extends Build {

  val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.") := {}

  val main = PlayProject("xxx", 1.0, Seq())
    .settings(defaultScalaSettings: _*)
    .settings(testJsTask)
}

Пока все хорошо.

Я хочу запускать это testJsTask всегда, когда кто-то выполняет задачу test.

Я думаю, это должно быть что-то вроде следующего:

test in Test <<= (test in Test).dependsOn(testJsTask)

Я понятия не имею, как это должно быть точно определено. Как добавить зависимость к существующей задаче, такой как «тест» или «сборка»?

UPDATE

После изменений, предложенных @Christian, определение сборки выглядит следующим образом:

object ApplicationBuild extends Build {
  val testJsTask = TaskKey[Unit]("testJs", "Run tests for javascript client.")
  def testJs = {}

  val main = PlayProject("xxx", 1.0, Seq())
    .settings(defaultScalaSettings: _*)
    .settings(testJsTask := testJs)

  (test in Test) <<= (test in Test) dependsOn (testJs)
}

К сожалению, решение также не работает:

[error] /xxx/project/Build.scala:21: not found: value test
[error]   (test in Test) <<= (test in Test) dependsOn (testJs)
[error]    ^
[error] one error found
[error] {file:/xxx/project/}default-f468ae/compile:compile: Compilation failed

Ответы [ 2 ]

14 голосов
/ 19 декабря 2011

Это один из способов сделать это:

Определите ключ задачи:

val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.")    

Определите задачу в настройках вашего проекта:

testJsTask <<= testJs

Сделать тест зависимым от него:

(test in Test) <<= (test in Test) dependsOn (testJs)

testJs можно определить следующим образом:

  def testJs = (streams) map { (s) => {
    s.log.info("Executing task testJs")
    // Your implementation
  }

[РЕДАКТИРОВАТЬ] Вы должны определить зависимости задачи в настройках проекта. За «нормальный» проект, вы бы сделали это следующим образом:

  lazy val testProject = Project(
    "testProject",
    file("testProject"),
    settings = defaultSettings ++ Seq(
      testJsTask <<= testJs,
      (test in Test) <<= (test in Test) dependsOn (testJsTask)
    )
  )
12 голосов
/ 02 января 2014

Play 2.2.x использует SBT 0.13 (см. Что нового в Play 2.2 ).Это дает некоторые новые способы составления задач в самой build.sbt (без обращения к файлу Scala в подкаталоге project/).

Если вы используете Play 2.2.x, вы можете определить зависимость между задачами.в build.sbt следующим образом:

lazy val testJsTask = taskKey[Unit]("Run JavaScript tests.")

testJsTask := {
  println("Running JavaScript tests...")
  java.util.concurrent.TimeUnit.SECONDS.sleep(3)
  println("...done.")
}

test in Test := {
  testJsTask.value
  (test in Test).value
}

Подробнее см. Задачи в официальной документации SBT.

...