2014-01-14 42 views
1

在我的Play項目中,我試圖在標準Play的test任務之前運行我的JavaScript測試。我寫了一個SBT任務,並且這個工作正常,除了我只想在Play測試通過時運行Play test任務。目前Play test任務運行JavaScript測試發生的任何事情。根據另一個結果執行SBT任務

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始終執行,無論exitCodejsTest的結果如何使test有條件?

+1

無論何時你說'a:= ... b.value ...',那麼a都依賴於b,並且b在運行中的任何內容之前首先運行。這就是爲什麼你所嘗試的不起作用。也許'taskDyn'會工作? (見https://github.com/sbt/sbt/commit/d1ed57ef519b82ea32bbd1165bcc4e8f128c9e52)如果沒有,也許你需要寫一個命令而不是任務。 –

回答

2

@SethTisue是正確的,當他提到dynamic task concept in SBT

以下內容添加到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號碼是工作的罰款。

+0

這是如何最終爲你工作的?儘管我可以從命令行運行karma,但sbt會拋出一個java io異常,聲稱它無法找到指定的文件。有任何想法嗎? – Jordan

+0

當我測試解決方案時,我已經排除了「運行因素」 - 我不知道如何安裝/準備測試。這就是爲什麼我寫*「被替換爲0或非0的數字。」* –

+0

是的作品謝謝 –

相關問題