문제

어떤 이유로 든, leflasync chaining in flexunit 테스트에 설명 된대로 이 기사 내가 시도 할 때 완전히 일하지 못합니다.

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top