1

我正在通过 Ant 运行 FlexUnit 测试。测试test1失败并显示消息“在预期事件之前发生超时”,但test2通过了。这两个测试之间的唯一区别是一个使用UIImpersonator.addChild()而另一个使用FlexGlobals.topLevelApplication.addElement().

test1即使我监听"addedToStage"事件也会失败。"added"然而,监听事件是test1通过的。

[Test(async, ui, description="Fails")]
public function test1():void
{
    var c:UIComponent = new UIComponent;
    Async.proceedOnEvent(this, c, FlexEvent.CREATION_COMPLETE);
    UIImpersonator.addChild(c);
}

[Test(async, ui, description="Passes")]
public function test2():void
{
    var c:UIComponent = new UIComponent;
    Async.proceedOnEvent(this, c, FlexEvent.CREATION_COMPLETE);
    FlexGlobals.topLevelApplication.addElement(c);
}
4

3 回答 3

1

添加子元素时,它不会启动 flex 组件生命周期,因为 displayobject 是 flash 核心元素,而不是 flex。

于 2013-04-12T15:24:42.007 回答
0

假设 Flex4/spark。addChild 添加了一个 MovieClip,而不是 Flex UIElement,它甚至不知道 FlexEvent 类型,因为它是一个 flash.core 对象。它只会抛出 addedToStage 或添加的事件(Event.added),但在单元测试中,它不会添加到阶段,因为 UIImpersonator 不是阶段的一部分

于 2013-04-12T14:46:43.000 回答
0

我今天使用新的 Apache FlexUnit 4.2.0 版本遇到了同样的问题。

当尝试运行包含在二进制发行版中的 sampleCIProject 时,使用 Async 的测试都不会成功。例外情况与上述完全相同。

看了一会儿源代码后,我注意到核心 FlexUnit 库有两种风格:flexunit-4.2.0-20140410-as3_4.12.0.swcflexunit-4.2.0-20140410-flex_4.12.0.swc.

其中第一个适用于纯 AS3 项目,而后者适用于使用 Flex 的项目。sampleCIProject 在库路径中包含这两个库,我假设它使用的是纯 AS3 库中的 UIImpersonator 类,而不是支持 Flex 的类。我flexunit-4.2.0-20140410-as3_4.12.0.swc从项目中删除了,你瞧,异步测试又开始工作了。

对你来说可能有点晚了,但我希望这对其他人有帮助。

于 2014-05-21T22:35:14.003 回答