使用Oil扩展的单元测试和模拟robotlegs服务调用

时间:2013-07-15 11:35:32

标签: unit-testing mocking robotlegs asmock

我有一个ExampleModel,它调用一个从我们的后端检索数据的ExampleService。我无法弄清楚如何为我的应用程序编写单元测试;其结构如下所示:

ExampleService

public function retrieveMyToDoList(parameters):Promise
{
    var promise:Promise = performRequest({request: "call to backend", parameters:    values, session_id: clientModel.sessionID});
    promise.addResultProcessor(parseRetrieveToDoListResult);
    return promise;
}

protected function parseRetrieveToDoListResult(data:Object, callback:Function):void
{
    does some JSON parsing into an object
    callback(null, object containing my retrieved data)
}

ExampleModel

public function getMyToDoList():Promise
{
    var promise:Promise = exampleService.retrieveToDoList(parameters);
    promise.addResultHandler(onGetToDoListResult);
    promise.addErrorHandler(onGetToDoListError);
    return promise;
}

private function onGetHeadrsByUserResult(promise:Promise):void
{
    // where this event will be listened to by mediators etc
    dispatchEvent(new ResponseEvent(GOOD_RESULT));
}

private function onGetHeadrsByUserError(promise:Promise):void
{
    dispatchEvent(new ResponseEvent(BAD_RESULT));
}

我正在尝试使用asmock来模拟我的服务,以便我可以测试我的模型以及它如何处理生成的Object中的各种结果但是如何模拟回调?我看到了返回值被嘲笑的示例,但在我的情况下,我正在使用Promise和回调,我不太确定如何继续。

如果有人可以请提出建议。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以让模拟服务返回真正的承诺并直接调用承诺的handleResult方法。

仅供参考:从模型到服务的直接依赖并不是一个好主意。您应该让服务操作模型,或者将服务的结果传递给操作模型的命令。除了辅助类之外,模型不应该依赖于其他任何东西。