2011-12-18 16 views
18

SBT with Play Framework kullanıyorum. Şimdiye kadarSbt'de test görevinden önce yürütmek için özel görev nasıl eklenir?

import sbt._ 
import sbt.Process._ 
import PlayProject._ 

object ApplicationBuild extends Build { 

    val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.") := {} 

    val main = PlayProject("xxx", 1.0, Seq()) 
    .settings(defaultScalaSettings: _*) 
    .settings(testJsTask) 
} 

çok iyi:

Projemde JavaScript testleri çalıştırmak için özel bir TaskKey yarattı.

Birisi test görevi yürütür her zaman bu testJsTask çalıştırmak istiyorum.

Ben şöyle bir şeyler olmalı sanırım:

test in Test <<= (test in Test).dependsOn(testJsTask) 

ben tam olarak nasıl tanımlanması gerektiğini bilmiyorum. 'Test' veya 'build' gibi mevcut bir göreve nasıl bağımlılık eklenir?

GÜNCELLEME aşağıdaki gibi inşa tanımı görünüyor

@Christian tarafından önerilen değişikliklerin sonra:

object ApplicationBuild extends Build { 
    val testJsTask = TaskKey[Unit]("testJs", "Run tests for javascript client.") 
    def testJs = {} 

    val main = PlayProject("xxx", 1.0, Seq()) 
    .settings(defaultScalaSettings: _*) 
    .settings(testJsTask := testJs) 

    (test in Test) <<= (test in Test) dependsOn (testJs) 
} 

Maalesef çözüm ya çalışmaz:

[error] /xxx/project/Build.scala:21: not found: value test 
[error] (test in Test) <<= (test in Test) dependsOn (testJs) 
[error] ^
[error] one error found 
[error] {file:/xxx/project/}default-f468ae/compile:compile: Compilation failed 
+0

Başarılı oldunuz mu? Son düzenlememde size yardımcı oldu mu? – Christian

+0

Şanssızlık Play sürümü ile aynı şeyi görmüyorum:/Daha fazla test yapmaya çalışacağım ve herhangi bir başarı olacaksa burada rapor vereceğim. –

+0

Bir çözüm bulup bulmadığınızı görmek istiyorum. Sadece gelecek okuyucular için – 2rs2ts

cevap

14

budur Bunu yapmanın bir yolu:

val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.")  

Projeleriniz ayarlarında görevi tanımlayın: Üzerinde

testJsTask <<= testJs 

Yap testi bağımlı:

(test in Test) <<= (test in Test) dependsOn (testJs) 
şöyle

testJs tanımlanabilir:

görev anahtarı tanımlayın
def testJs = (streams) map { (s) => { 
    s.log.info("Executing task testJs") 
    // Your implementation 
    } 

[DÜZENLEME ] Proje ayarlarında görev bağımlılıklarını tanımlamanız gerekir. "normal" bir proje için, bunu şu şekilde yapacağını:

lazy val testProject = Project(
    "testProject", 
    file("testProject"), 
    settings = defaultSettings ++ Seq(
     testJsTask <<= testJs, 
     (test in Test) <<= (test in Test) dependsOn (testJsTask) 
    ) 
) 
+1

Bir şekilde bu bana yanlış eksik görünüyor. Yapmak istediğim şey, birisinin 'test' komutunu çalıştırması gerektiğinde, diğer tüm testler hariç, aynı zamanda testJ'leri de yürüteceğinden emin olmaktır. Ayrıca görüyorum ki ': =' sembolünü hiç kullanmadınız, ki bu da Görevler oluştururken ihtiyaç duyduğum - ya da yanılıyor muyum ?. DÜZENLEME: Düzenlemenizi görüyorum, şimdi daha anlamlı hale gelmeye başladım, hemen deneyeceğim;) –

+1

Bir görevi doğrudan şu şekilde tanımlayabilirsiniz: =. Diğer olasılığı tercih ederim çünkü o zaman görev anahtarlarını gerçek görevlerden ayırabilirim. – Christian

+0

Hala aynı sorunu yaşıyorum: Build.scala: 19: bulunamadı: değer testi. [error] (Testte test edin) << = (Testte test edin) dependsOn (testJsTask) –

10

Çal 2.2.x SBT 0.13 (What’s new in Play 2.2 bakınız) kullanır. Bu, build.sbt içinde kendisinin (project/ alt dizininde bir Scala dosyasına başvurmadan) görevlerin yeni bir yolunu getirir.

Eğer aşağıdaki gibi build.sbt yılında görevler arasında bağımlılık tanımlayabiliriz Çal 2.2.x kullanmak edersek:

lazy val testJsTask = taskKey[Unit]("Run JavaScript tests.") 

testJsTask := { 
    println("Running JavaScript tests...") 
    java.util.concurrent.TimeUnit.SECONDS.sleep(3) 
    println("...done.") 
} 

test in Test := { 
    testJsTask.value 
    (test in Test).value 
} 

fazla ayrıntı için SBT resmi belgelerinde Tasks bakın.

+1

görevleri sırayla veya aynı anda? – monkjack

+0

Sıralı olarak. İlk testJsTask, sonra test görevi. – htomek

+1

Şu ana kadar doğru olmadığını biliyorum @htomek http://www.scala-sbt.org/release/docs/Custom-Settings.html#Execution+semantics+of+tasks Use Def.sequential() ' görevleri http://www.scala-sbt.org/release/docs/Howto-Sequencing.html adresinde çalıştırmak için – trudolf

İlgili konular