2

出于某种原因,当我尝试这样做时,本文中描述的 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 中的一个错误......有解决方法吗?

4

1 回答 1

2

我做了更多的研究,发现这确实是 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 的事件队列中的所有内容都被处理后检查对象状态的尝试。我发现了一种更简单的方法来完成此操作而不会弄乱EventDispatchers。

当您希望处理事件队列时,请在测试的第一部分结束时进行以下调用。

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

phaseTwo具有以下签名的功能。

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

e将传递一个null对象。这是与 兼容所必需的addAsync

于 2009-01-01T17:57:40.323 回答