FlexUnit addAsync encadeamento
-
03-07-2019 - |
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?
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 EventDispatcher
s.
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
.