正如 www.Flextras.com 的评论中所述,对 invalidateSkinState() 的调用不会触发任何事件。
当布局管理器处理时,组件稍后可能会分派某些事件。但是,我的问题是测试(单元测试)对特定事件的测试组件执行的调用invalidateSkiState()
,我不能等待这样的事件。此外,组件永远不会添加到阶段,因此布局管理器永远不会处理它。
所以我想出了一个解决方案,涉及扩展测试的组件类以进行测试。这样我就不必修改测试代码。
这是我的测试用例类的示例:
package com.example.components
{
import org.flexunit.Assert;
public class ComponentTests
{
[Test]
public function testSkinStateIsInvalidatedOnCustomEvent():void
{
var component:ComponentForTests = new ComponentForTests();
var event:CustomEvent = new CustomEvent();
// Here we set up the event for the test
testedComponent.init();
testedComponent.isStateInvalidated = false;
testedComponent.handleCustomEvent(event);
Assert.assertTrue("Skin state should be invalidated",
testedComponent.isStateInvalidated);
}
}
}
import com.example.components.TestedComponent;
internal class ComponentForTests extends TestedComponent
{
internal var isStateInvalidated:Boolean = false;
override public function invalidateSkinState():void
{
isStateInvalidated = true;
super.invalidateSkinState();
}
}
我把它贴在这里以防它可以帮助别人。尽管如此,这个解决方案仍然受到批评,欢迎任何更好的解决方案。