次のコードを使用して、 GitHubでuTest テスト ラッピングを試しました。
object AjaxExp01SOTest extends TestSuite {
val log = JSLog.getLogger(getClass().getSimpleName)
JSLog.setGlobalLevel(Level.DEBUG)
def tests = TestSuite {
"OK: GET slP" - {
val promise = Promise[XMLHttpRequest]
val callback: (dom.Event, XMLHttpRequest ) => Unit = { (e,x) =>
log.debug("callback running...")
log.debug("res.status = " + x.status + " res.responseText = " + x.responseText )
promise.success(x)
}
def send( method: String, url: String, isAsync: Boolean, timeout: Long,
requestHeader: String, requestHeaderValue: String,
data: String, callback: (dom.Event, XMLHttpRequest ) => Unit ): XMLHttpRequest = {
val xhr = new dom.XMLHttpRequest()
xhr.open(method, url, isAsync )
xhr.timeout = timeout
if ( requestHeader != null) {
xhr.setRequestHeader(requestHeader, requestHeaderValue)
}
def cb(e: dom.Event): Unit = { callback(e,xhr) }
xhr.onload = cb _
if ( data != null) {
xhr.send(data)
} else {
xhr.send()
}
xhr
}
log.debug("send begin")
val url = "http://localhost:9000/slG/124"
val res = send("GET", url, true, 0, null, null, null, callback)
log.debug("send end")
promise.future
}
}
override def utestWrap(runBody: => concurrent.Future[Any])
(implicit ec: ExecutionContext): concurrent.Future[Any] = {
val f = runBody
f.onComplete {
case Success(a) if ( a != null )=> { log.debug("SUCCESS " + a.getClass.getSimpleName) } // BoxedUnit,
case Success(a) => { log.debug("SUCCESS a == null") }
case Failure(a) => log.debug("FAILURE")
}
log.debug("utestWrap begin")
f
}
}
この結果は次のとおりです。
21:03:23.164 DEBUG AjaxExp01SOTest - SUCCESS BoxedUnit
21:03:23.168 DEBUG AjaxExp01SOTest - utestWrap begin
21:03:23.172 DEBUG AjaxExp01SOTest - OK: GET slP *****
21:03:23.174 DEBUG AjaxExp01SOTest - send begin
21:03:23.177 DEBUG AjaxExp01SOTest - send end
21:03:23.180 DEBUG AjaxExp01SOTest - utestWrap begin
クライアントは GET リクエストをサーバーに送信しましたが、サーバーは遅延後に応答しましたが、クライアントのコールバックは呼び出されませんでした。コールバックが呼び出されるのを待っている状態で、テストが停止しました。
このコードのどこが間違っていますか? ほとんどのutestWrap
場合、エラーまたはその他の誤解があります。
もう 1 つの (マイナーな) 質問は、「SUCCESS BoxedUnit」とは何ですか? TestSuite には、"SUCCESS BoxedUnit" の後に開始され、"SUCCESS XMLHttpRequest" に到達しないテスト ケース "GET slP" が 1 つだけあります。