flexunit addAsync chaining
-
03-07-2019 - |
题
出于某种原因,按照这篇文章在我尝试的时候完全无法工作。
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中的一个错误......是否有解决方法?
解决方案
我做了更多研究,发现这确实是flexunit中的一个错误,它看起来像是已修复在下一个版本中。我找到的解决方法是使用 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
兼容是必要的。
不隶属于 StackOverflow