由于某些原因,当我尝试这样做时,this article中描述的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中的一个bug ...有解决办法吗?
发布于 2009-01-01 17:57:40
我做了更多的研究,发现这确实是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, [参数...]), [null]);
其中phaseTwo函数具有以下签名。
private function phaseTwo(e:Event, args:Array):void
将向e传递一个null对象。这是与addAsync兼容所必需的。
https://stackoverflow.com/questions/402415
复制相似问题