Pergunta

Por alguma razão, addAsync encadeamento em um teste FlexUnit conforme descrito em este artigo falhar totalmente ao trabalho quando eu tento fazê-lo.

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);
}

Se eu executar este teste, verifyFirst é chamado mas verifySecond não. Estou assumindo que este é um bug no FlexUnit ... há uma solução?

Foi útil?

Solução

Eu fiz mais algumas pesquisas e descobriram que este é realmente um bug no FlexUnit, que parece ser fixo no próximo lançamento. A solução que eu encontrei foi a vez usar Application.application.callLater para despachar o segundo evento.

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")]);
}

Esta questão foi inspirado por uma tentativa para inspecionar o estado de um objeto depois de tudo na fila de eventos do flash tinha sido processado. Eu descobri uma maneira mais simples de fazer isso sem mexer com EventDispatchers.

Faça a seguinte chamada no final da primeira parte do teste quando você quer a fila de eventos a serem processados.

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

Com a função phaseTwo ter a seguinte assinatura.

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

e será passado um objeto null. Isso é necessário para ser compatível com addAsync.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top