愚人呓语 eidiot's blog. My flapdoodles.

21五/10

使用FlexUnit4对as3-signals进行异步测试

Read in English: Async test for as3-signals with FlexUnit4

使用 Robert Penneras3-signals 可以帮助我们节省代码量并写出更整洁的代码. 这是一个由几个代理方法组成的使用 FlexUnit4进行测试的扩展

  • proceedOnSignal
  • handleSignal
  • failOnSignal
  • registerFailureSignal

proceedOnSignal

使用这个方法确认一个signal必须被抛出。

[Test(async)]
public function test_proceedOnSignal():void 
{
    var model:IModel = new SomeModel();
    proceedOnSignal(this, model.changedSignal);
    model.doSomethingChange();
}

handleSignal

使用这个方法确认一个signal被抛出并且在handler方法里进行更多的断言。这个handler方法必须接收两个参数,第一个是SignalAsyncEvent,可以从这个事件的 args 属性里拿到 signal 的 dispatch 方法里传出的所有参数。第二个参数是一个Object,传进的是 handleSignal 方法的 passThroughData 参数。

[Test(async)] 
public function change_user():void 
{
    var model:IModel = new SomeModel();
    handleSignal(this, model.changedSignal, verify_user, 500, {"name":"Tom", "age":20});
    model.changeUser("Tom", 20);
}
private function verify_user(event:SignalAsyncEvent, data:Object):void 
{
    assertEquals(event.args[0], data.name);
    assertEquals(event.args[1], data.age);
}

failOnSignal

使用这个方法来确认一个signal 被抛出。

[Test(async)] 
public function not_changed():void 
{
    var model:IModel = new SomeModel();
    failOnSignal(model.changedSignal);
    model.doSomethingNotChange();
}

registerFailureSignal

使用这个方法在一个signal被抛出的时候使测试失败。假设你正在等待一个service的success signal,当这个service的error signal 抛出的时候你将希望这个测试直接失败,而不是等待超时。

[Test(async)] 
public function call_service():void 
{
    var service:IService = new SomeService();
    registerFailureSignal(this, service.failedSignal);
    proceedOnSignal(this, service.successSignal);
    service.call();
}

更多