Question

Pour une raison quelconque, addAsync chaînant dans un test flexunit comme décrit dans cet article ne fonctionne pas du tout lorsque je tente de le faire.

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

Si j'exécute ce test, verifyFirst est appelé, mais verifySecond ne le fait pas. Je suppose qu’il s’agit d’un bogue dans Flexunit ... existe-t-il une solution de contournement?

Était-ce utile?

La solution

J’ai effectué quelques recherches supplémentaires et découvert qu’il s’agissait bien d’un bogue dans flexunit, qui semble corrigé dans la prochaine version. La solution que j'ai trouvée consistait à utiliser plutôt Application.application.callLater pour envoyer le deuxième événement.

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

Cette question a été inspirée par une tentative d'inspection de l'état d'un objet après le traitement de tous les éléments de la file d'attente d'événements de Flash. J'ai découvert un moyen plus simple d'accomplir cela sans jouer avec les EventDispatcher s.

Faites de l'appel suivant la fin de la première partie du test lorsque vous souhaitez que la file d'attente d'événements soit traitée.

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

Avec la fonction phaseTwo portant la signature suivante.

fonction privée phaseTwo (e: événement, arguments: tableau): void

e recevra un objet null . Cela est nécessaire pour être compatible avec addAsync .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top