2010-11-27 16 views
3

Tout le monde sait comment fonctionne Async.asyncHandler() et si Async.processOnEvent() ne peut être utilisé que dans la méthode [Avant]. (Tout le monde connaît un document utile en plus de http://docs.flexunit.org/).flexunit du handle customer event et Async.asyncHandler()

Je définis un composant MXML nommé HelloCompo (extends Vbox), et le composant définit une fonction nommée hello(), dans hello() distribue un événement client nommé HelloEvent (le type d'événement juste nommé "hello"), et Dans une autre fonction nommée init() écoutée pour l'événement, je veux tester si l'événement est distribué correctement ou non. J'ai donc le test suivant:

var helloCompo = new HelloCompo();

helloCompo.hello(); 

helloCompo.addEventListener("hello", Async.asyncHandler(this, handleHello, 1000, null, handleTimeOut)); 

Le test sera toujours excute la méthode handleTimeOut (ce qui signifie la HelloEvent n'est pas distribué, mais quand helloCompo.hello() excute, vraiment dispacthed, donc ce qui se passe mal?)

Répondre

6
package flexUnitTests 
{ 
    import flash.events.Event; 

    import org.flexunit.asserts.assertTrue; 
    import org.flexunit.asserts.fail; 
    import org.flexunit.async.Async; 

    public class HelloTest 
    {  
     private var helloCompo:HelloCompo; 

     [Before] 
     public function setUp():void 
     { 
      helloCompo = new HelloCompo(); 
     } 

     [After] 
     public function tearDown():void 
     { 
      helloCompo = null; 
     } 

     [Test(async)] 
     public function testHello():void 
     { 
      var handler:Function = Async.asyncHandler(this, helloHandler, 300, null, helloFailed); 
      helloCompo.addEventListener("hello", handler); 
      helloCompo.hello(); 
     } 

     private function helloHandler(event:Event, passThroughObject:Object):void 
     { 
      //assert somthing 
     } 

     private function helloFailed(event:Event, passThroughObject:Object):void 
     { 
      fail("hello not dispatched"); 
     } 


    } 
} 

HelloCompo.as

package 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.events.IEventDispatcher; 

    public class HelloCompo extends EventDispatcher 
    { 
     public function HelloCompo(target:IEventDispatcher=null) 
     { 
      super(target); 
     } 

     public function hello():void 
     { 
      dispatchEvent(new Event("hello")); 
     } 
    } 
} 
2

Je pense que vous avez besoin pour ajouter votre écouteur d'événement avant d'appeler bonjour() fait

+0

@pez. Désolé, je ne le pense pas – jason

+0

Ouais ma mauvaise, tu as raison. J'ai fait un test rapide et ça fonctionne bien. Etes-vous sûr de mettre la propriété async sur votre tag de test? –

+0

S'il vous plaît voir ma réponse éditée –