SBT 在 Karma 测试失败时退出
SBT exit on Failed Karma Tests
我在 Play 框架上有一个 angular 应用 运行ning。
我在我的 Karma/Jasmine 测试套件中添加了 运行 它作为 "sbt test" 的一部分,具有以下 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
但是,如果其中一项测试失败,sbt 似乎不会退出...
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
在 运行ning sbt test 我也 运行 sbt dist 之后,如果任何测试失败,我不希望发生这种情况。如果 JS 或 scala 测试失败,我希望 sbt 退出。
谢谢!
看起来您正在让 SBT test
任务成功,即使来自 Karma 的退出代码不是 0
。最简单的解决方法是在这种情况下抛出异常,SBT 会将其检测为任务失败:
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
但是现在您处于一种奇怪的情况下,即使测试失败,jsTest
任务在技术上仍然成功。让 jsTest
任务检查错误代码会更合适,而 test
任务依赖于它:
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
如果您可以同时进行 JS 测试和 Scala 测试 运行,您可以进一步简化它:
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
}
我在 Play 框架上有一个 angular 应用 运行ning。 我在我的 Karma/Jasmine 测试套件中添加了 运行 它作为 "sbt test" 的一部分,具有以下 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
但是,如果其中一项测试失败,sbt 似乎不会退出...
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
在 运行ning sbt test 我也 运行 sbt dist 之后,如果任何测试失败,我不希望发生这种情况。如果 JS 或 scala 测试失败,我希望 sbt 退出。
谢谢!
看起来您正在让 SBT test
任务成功,即使来自 Karma 的退出代码不是 0
。最简单的解决方法是在这种情况下抛出异常,SBT 会将其检测为任务失败:
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
但是现在您处于一种奇怪的情况下,即使测试失败,jsTest
任务在技术上仍然成功。让 jsTest
任务检查错误代码会更合适,而 test
任务依赖于它:
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
如果您可以同时进行 JS 测试和 Scala 测试 运行,您可以进一步简化它:
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
}