Ada dua spesifikasi di sini. Yang pertama tidak lewat karena eventually
di check
tidak akan menyebabkan seluruh rute diputar ulang tetapi ini adalah cara yang saya lebih suka ikuti. Spesifikasi kedua adalah solusi terbaik yang saya temukan (dan membuktikan bahwa itu bisa dilakukan;)) tetapi berisi beberapa boilerplate seperti fungsi tambahan yang dalam kehidupan nyata harus mengembalikan tuple daripada satu hal dan itu tidak konsisten dengan desain sintaks tes semprot untuk menguji rute.
Jadi pertanyaannya adalah: Cara menggunakan eventually
dengan tes semprot agar sedekat mungkin dengan sintaksis dari spesifikasi pertama.
import org.specs2.mutable.Specification
import spray.routing.Directives
import spray.http._
import MediaTypes._
import HttpCharsets._
import spray.testkit.Specs2RouteTest
class EventuallyAndRouts extends Specification with Directives with Specs2RouteTest {
var i = 0
def incAndGet = {
i = i + 1
println(s"This is i = $i")
s"$i"
}
"The testing infrastructure should support an eventually matcher" >> {
"but it is not working inside a check as I need :( (and this will fail)" in {
i = 0
Get() ~> complete(incAndGet) ~> check {
body must eventually(7, 20 millis)(be_===(HttpEntity(ContentType(`text/plain`, `UTF-8`), "5")))
}
}
"so I got workaround :/ (and this is passing)" in {
i = 0
def requestResult = Get() ~> complete(incAndGet) ~> check {
body
}
requestResult must eventually(7, 20 millis)(be_===(HttpEntity(ContentType(`text/plain`, `UTF-8`), "5")))
}
}
}