Playframework 2.0 根据另一个测试的结果执行SBT任务

Playframework 2.0 根据另一个测试的结果执行SBT任务,playframework-2.0,sbt,Playframework 2.0,Sbt,在我的Play项目中,我试图在标准Play的测试任务之前运行JavaScript测试。我已经编写了一个SBT任务,除了我只希望在JavaScript测试通过时运行Playtest任务外,这个任务运行得很好。此时,Playtest任务运行JavaScript测试中发生的任何事情 我的build.sbt如下所示: val jsTest = taskKey[Int]("jsTest") jsTest in Test := { "karma start karma.conf.js" ! } te

在我的Play项目中,我试图在标准Play的
测试任务之前运行JavaScript测试。我已经编写了一个SBT任务,除了我只希望在JavaScript测试通过时运行Play
test
任务外,这个任务运行得很好。此时,Play
test
任务运行JavaScript测试中发生的任何事情

我的
build.sbt
如下所示:

val jsTest = taskKey[Int]("jsTest")

jsTest in Test := {
  "karma start karma.conf.js" !
}

test := {
  val exitCode = (jsTest in Test).value
  if(exitCode == 0) {
    (test in Test).value
  }
}

正如我所说的,
test.value
总是被执行,而不管
exitCode
。我如何使
test
jsTest
的结果为条件?

@SethTisue说得对

将以下内容添加到
build.sbt

lazy val jsTest = taskKey[Int]("jsTest")

jsTest in Test := {
  "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

“karma start karma.conf.js”时,它似乎工作正常被替换为
0
或非
0
数字。

只要你说
a:=。。。b、 值…
,则a依赖于b,b在运行a主体中的任何内容之前先运行。这就是为什么你试过的不起作用。也许
taskDyn
会起作用?(请参阅)如果没有,可能您需要编写命令而不是任务。这最终是如何为您工作的?虽然我可以从命令行运行karma,但sbt抛出一个java io异常,声称它找不到指定的文件。有什么想法吗?当我测试解决方案时,我已经将karma排除在运行之外-我不知道如何安装/准备好进行测试。这就是我为什么写“替换为0或非0数字。”