3 votes

Sortie du SBT sur les tests de karma échoués

J'ai une application angulaire fonctionnant sur le framework Play. J'ai ajouté ma suite de tests Karma/Jasmine et je l'exécute dans le cadre de "sbt test" avec la configuration suivante de build.sbt...

// run the angular JS unit tests (karma & jasmine)
lazy val jsTest = taskKey[Int]("jsTest")
jsTest in Test := {
    "test/js/node_modules/karma/bin/karma start karma.conf.js" !
}
test := Def.taskDyn {
    val exitCode = (jsTest in Test).value
    if (exitCode == 0)
    Def.task {
        (test in Test).value
    }
    else Def.task()
}.value

Cependant, si l'un des tests échoue, sbt ne semble pas sortir...

Chrome 50.0.2661 (Mac OS X 10.10.5): Executed 90 of 90 (1 FAILED) (0.512 secs / 0.453 secs)
[success] Total time: 3 s, completed 02-Jun-2016 12:11:13

Après avoir lancé sbt test, je lance également sbt dist et je ne veux pas que cela se produise si l'un des tests échoue. Je veux que sbt se termine si les tests JS ou scala échouent.

Merci !

2voto

Messa Points 111

On dirait que vous laissez le SBT test réussir la tâche même si le code de sortie de Karma n'est pas 0 . La solution la plus simple est de lancer une exception dans ce cas, et SBT le détectera comme l'échec de la tâche :

  lazy val jsTest = taskKey[Int]("jsTest")
  jsTest in Test := {
    "test/js/node_modules/karma/bin/karma start karma.conf.js" !
  }
  test := Def.taskDyn {
    val exitCode = (jsTest in Test).value
    if (exitCode == 0)
      Def.task {
        (test in Test).value
      }
    else sys.error("Karma tests failed with exit code " + exitCode)
  }.value

Mais maintenant vous êtes dans une situation étrange, où le jsTest est techniquement en train de réussir même si les tests échouent. Il serait plus approprié de faire de la jsTest vérifier le code d'erreur, et la test tâche en dépendent :

  lazy val jsTest = taskKey[Unit]("jsTest")
  jsTest in Test := {
    val exitCode = "test/js/node_modules/karma/bin/karma start karma.conf.js" !
    if (exitCode != 0) {
      sys.error("Karma tests failed with exit code " + exitCode)
    }
  }
  test := Def.taskDyn {
    (jsTest in Test).value
    Def.task((test in Test).value)
  }.value

Si vous êtes d'accord pour que les tests JS et les tests Scala soient exécutés en parallèle, vous pouvez encore simplifier les choses :

  lazy val jsTest = taskKey[Unit]("jsTest")
  jsTest in Test := {
    val exitCode = "test/js/node_modules/karma/bin/karma start karma.conf.js" !
    if (exitCode != 0) {
      sys.error("Karma tests failed with exit code " + exitCode)
    }
  }
  test := {
    (jsTest in Test).value
    (test in Test).value
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X