0

我正在尝试将 callLater 与 FlexUnit v0.9 一起使用:

public function testCallLater():void {
   Application.application.callLater( addAsync(function():void {
      assertTrue(true);
   }, 1000));
}

但是当它运行时我得到这个错误:

ArgumentError: Error #1063: Argument count mismatch on flexunit.framework::AsyncTestHelper/handleEvent(). Expected 1, got 0.
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]

我不确定问题是什么。callLater 与 FlexUnit 不兼容吗?

4

3 回答 3

4

首先,您应该真正考虑迁移到 FlexUnit 4.0:http: //blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

其次, callLater 用于延迟处理直到视觉类中的下一帧。您的测试用例类不是扩展 UIComponent 的可视类,因此您不应尝试使用 callLater。

第三, addAsync 用于测试异步操作的结果。这通常用于测试网络请求、文件读取、计时器事件等的结果。这就是为什么通常您会在 addAsync 测试函数中看到“事件”作为参数(因为异步请求使用事件来处理结果)。在您的情况下,您没有使用 addAsync 调用响应异步操作,因此您不应该在测试函数中查找事件。删除 event:Event 参数,错误就会消失。

但是,也许您可​​以重新表述这个问题以说明您要完成的工作?您指出的代码示例并没有真正做任何有用的事情。如果您可以更具体一点,我们可以帮助您编写更好的测试用例。

有关在旧版本的 FlexUnit 中使用 addAsync 的帮助,请参阅本教程:http ://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

于 2009-06-29T15:44:16.673 回答
2

以防万一有人需要它,这有效:

private function testCallLater():void {
    Application.application.callLater(doCallLater, [ addAsync(funcUnderTest, 1000) ]);
}

private function doCallLater(testFunc:Function):void {
    testFunc(null);  // Dummy arg necessary because of addAsync expecting one arg
}

private function funcUnderTest(e:Object = null):void {
    assertTrue(true);
}
于 2010-07-25T11:59:29.900 回答
2

看起来您正在期待一个事件,但没有得到一个。我想下面的代码会起作用。

public function testCallLater():void {
   Application.application.callLater( addAsync(function(/*removed event declaration*/):void {
      assertTrue(true);
   }, 1000));
}
于 2009-06-29T15:40:09.943 回答