2014-01-14 5 views
1

В моем проекте Play я пытаюсь запустить свои тесты JavaScript перед заданием стандартного Play test. Я написал задачу SBT, и это работает отлично, за исключением того, что я хочу, чтобы задача Play test выполнялась при прохождении тестов JavaScript. На данный момент задача 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 всегда выполняется независимо от exitCode. Как сделать test условным результатом jsTest?

+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

Я исключил, что «karma» запущен, когда я протестировал решение. Я понятия не имел, как его установить/готово к тестированию. Вот почему я написал * "заменен на 0 или не 0 номер." * –

+0

yep, который работает спасибо –

Смежные вопросы