2011-07-07 50 views
0

我正在使用此AsyncHelper。我想创建基本的测试用例,我想从测试方法派发事件(通过Parsley MessageDispatcher),以其他任何方法捕获该事件并将其返回(通过Flex EventDispatcher)。SequenceWaiter无法识别我的事件

这是我的测试案例: package flexUnitTests { import flash.events.ErrorEvent; import flash.events.Event; import flash.events.EventDispatcher;

import flexUnitTests.events.TestEvent; 
import flexUnitTests.helpers.AsyncHelper; 

import mx.logging.Log; 
import mx.logging.LogEventLevel; 
import mx.logging.targets.TraceTarget; 

import org.flexunit.assertThat; 
import org.hamcrest.object.equalTo; 
import org.spicefactory.parsley.core.context.Context; 
import org.spicefactory.parsley.core.messaging.MessageProcessor; 
import org.spicefactory.parsley.dsl.context.ContextBuilder; 
import org.spicefactory.parsley.flex.FlexConfig; 
import org.spicefactory.parsley.flex.FlexContextBuilder; 

public class HelloTest extends AsyncHelper { 

    [MessageDispatcher] 
    public var dispatcher:Function; 

    [Inject] 
    public var context:Context; 

    public var eventDispatcher:EventDispatcher; 

    [Before] 
    public function initializeContext():void { 
     // Use ContextBuilder to build context 
     var context:Context = ContextBuilder.newSetup() 
      .newBuilder() 
      .config(FlexConfig.forClass(ParsleyConfig)) 
      .build(); 

     // Add this test case to context 
     context.addDynamicObject(this); 

     eventDispatcher = new EventDispatcher(); 
    } 

    [After] 
    public function destroyContext():void { 
     eventDispatcher = null; 
    } 

    [MessageHandler(selector='TestEvent.ok')] 
    public function passItOn(event:TestEvent):void { 
     eventDispatcher.dispatchEvent(event); 
    } 

    [Test(async)] 
    public function tryIt():void { 
     dispatcher(new TestEvent(TestEvent.OK)); 
     waitFor(eventDispatcher, TestEvent.OK, 2000); 
     thenAssert(function(event:TestEvent, data:*):void { 
      assertThat(event.type, equalTo('TestEvent.ok')); 
     }); 
    } 
} 

}

我的事件是这样的: package flexUnitTests.events { import flash.events.Event;

public class TestEvent extends Event 
{ 
    static public const OK :String = "TestEvent.ok"; 

    public function TestEvent(type:String) 
    { 
     super(type); 
    } 
} 

}

我不知道哪里出了问题。如果我在代码中做了跟踪,我可以看到Parsley将我的事件派发到passItOn方法中。并且Flex返回EventDispatcher派发事件。但我不知道为什么SequenceWaiter不能识别我的事件。

+0

我不明白;代码中没有SequenceWaiter。那是什么,为什么你期望它能够识别你的事件? – JeffryHouser

+0

我不明白这个测试有什么意义。你只是在测试欧芹的活动巴士? Jens Halm在任何发布之前已经这样做了。单元测试不应该是关于框架,而是小的,可测试的代码片断。此外,您还要求我们调试(为您)一些由我以前从未见过的随机花花公子在线制作的第三方课程。我说要把它带上去。投票结束。 –

+0

嗨,有没有这个类的testCase ... [链接] http://www.emte.cz/flex/HandlingEventsTest_part2.as 这是我的[链接] http://www.emte.cz/ flex/TestEvent.as 我只是在这里学习如何创建这种类型的测试。之后,我想派遣一些活动给任何一个班级,并尝试抓住其他活动。只有一个事件由Parsley发送,然后由Flex分派。这只是一些例子,如何使用它 - 没有其他意义。 – emte

回答

0

我看现在问题在哪里: 这是因为我在创建序列之前调用了dispatcher()。它改变了调用方法问题消失的顺序。