2008-12-31 55 views
2

出於某種原因,在我嘗試執行操作時,如this article中所述,在flexunit測試中添加同步鏈接完全失敗。flexunit addAsync鏈接

public function testWhatever():void { 
    var cont:EventDispatcher = new EventDispatcher(); 
    cont.addEventListener("continue", addAsync(verifyFirst, 1000)); 
    cont.dispatchEvent(new Event("continue")); 
} 

private function verifyFirst(e:Event):void { 
    var cont:EventDispatcher = new EventDispatcher(); 
    cont.addEventListener("continue", addAsync(verifySecond, 1000)); 
    cont.dispatchEvent(new Event("continue")); 
} 

private function verifySecond(e:Event):void { 
    assertTrue(true); 
} 

如果我運行這個測試,verifyFirst會被調用,但verifySecond不會。我假設這是flexunit中的錯誤...是否有解決方法?

回答

2

我做了一些更多的研究,發現這確實是flexunit中的一個錯誤,在下一個版本中看起來是fixed。我找到的解決方法是改爲使用Application.application.callLater來發送第二個事件。

private function verifyFirst(e:Event):void { 
    var cont:EventDispatcher = new EventDispatcher(); 
    cont.addEventListener("continue", addAsync(verifySecond, 1000)); 
    Application.application.callLater(cont.dispatchEvent, 
     [new Event("continue")]); 
} 

這個問題的靈感來自於嘗試在Flash事件隊列中的所有內容都被處理後檢查對象的狀態。我發現了一個更簡單的方法來完成這個任務,而不會與EventDispatcher混淆。

當您希望處理事件隊列時,將以下呼叫作爲測試的第一部分的結束。

Application.application.callLater(addAsync(phaseTwo, 1000, [ARGS ...]), [null]);

利用具有以下簽名的phaseTwo功能。

private function phaseTwo(e:Event, args:Array):void

e將傳遞一個null對象。這是必須與addAsync兼容。