繁体   English   中英

两个绑定失败的TextInput文本更改的Flexunit测试

[英]Flexunit test of TextInput text change with two binding failing

我正在尝试为flex视图编写单元测试。 TextInput reportName和属性_parameters之间有两种绑定。 当我运行代码时,绑定工作正常,但是测试失败。 以下是以类似方式失败的许多测试之一。 测试失败,并显示以下消息:

Error: Expected: "newName"
but: was "defaultTitle"

parameters_changeHandler()的跟踪消息显示以下内容:

parameters_changeHandler
_parameters.reportName defaultTitle
reportName.text newName

因此,TextInput, reportName正在正确更新,但是我在测试中在其上设置文本的方式是取消绑定,至少我认为这是问题所在。

如何保持两个绑定并仍更新值? 还有另一种模拟用户输入数据的方法吗?

View.mxml:

    <fx:Script>
        <![CDATA[
            import events.events.UpdatePointRadiusReportModalParametersEvent;
            import model.LocationAnalysisParameters;

            [Bindable]
            internal var _parameters:LocationAnalysisParameters;

            public function set parameters(parameters:LocationAnalysisParameters):void
            {
                this._parameters = parameters;
            }

            public function get parameters():LocationAnalysisParameters
            {
                return _parameters;
            }

            protected function parameters_changeHandler():void
            {
                trace('parameters_changeHandler');
                trace('_parameters.reportName', _parameters.reportName);
                trace('reportName.text', reportName.text);
                dispatchEvent(new UpdatePointRadiusReportModalParametersEvent(_parameters));
            }
        ]]>
    </fx:Script>

    <s:VGroup>
        <s:Label id="reportNameLabel"
            styleName="toolStyle"
            text="Report Name:"/>
        <s:TextInput id="reportName"
            width="100%"
            maxChars="50"
            minWidth="200"
            styleName="toolStyle"
            text="{_parameters.reportName}"
            change="parameters_changeHandler()"
            restrict="a-zA-Z0-9 \-_"/>
    </s:VGroup>

</components:FlyoutPanel>

LocationAnalysisParameters.as

package model
{
    import utils.StringUtils;

    [Bindable]
    public class LocationAnalysisParameters
    {
        public var reportName:String;

        public var reportDescription:String;

        public function reset():void
        {
            reportName = null;
            reportDescription = null;
        }

        public function isValid():Boolean
        {
            return !StringUtils.isNullOrEmpty(reportDescription) && !StringUtils.isNullOrEmpty(reportName);
        }

        public function clone():LocationAnalysisParameters
        {
            const c:LocationAnalysisParameters = new LocationAnalysisParameters();
            c.reportName = reportName;
            c.reportDescription = reportDescription;
            return c;
        }
    }
}

ViewTest.as包视图{

    public class PointRadiusReportPopupViewTest
    {

        private var popupView:PointRadiusReportPopupView;


        [Before(async, ui)]
        public function setUp():void
        {
            popupView = new PointRadiusReportPopupView();
            Async.proceedOnEvent(this, popupView, FlexEvent.CREATION_COMPLETE);
            UIImpersonator.addChild(popupView);
        }

        [After(ui)]
        public function tearDown():void
        {
            UIImpersonator.removeChild(popupView);
            popupView = null;
        }

        [Test(async, ui)]
        public function reportNameChangeShouldDispatchUpdatePointRadiusReportModalParametersEvent():void
        {
            //arrange
            const parameters:LocationAnalysisParameters = new LocationAnalysisParameters();
            parameters.reportName = 'defaultTitle';
            parameters.reportDescription = 'defaultDescription';
            popupView.parameters = parameters;
            const expectedParameters:LocationAnalysisParameters = new LocationAnalysisParameters();
            expectedParameters.reportName = 'newName';
            expectedParameters.reportDescription = 'defaultDescription';

            //act
            Async.handleEvent(this, popupView, UpdatePointRadiusReportModalParametersEvent.TYPE, assertUpdatePointRadiusReportModalParametersEvent, 500, expectedParameters);
            updateTextInput(popupView.reportName, 'newName');
        }

        private function assertUpdatePointRadiusReportModalParametersEvent(evt:UpdatePointRadiusReportModalParametersEvent, expectedParameters:LocationAnalysisParameters):void
        {
            assertThat(evt.parameters.reportName, equalTo(expectedParameters.reportName));
            assertThat(evt.parameters.reportDescription, equalTo(expectedParameters.reportDescription));
        }

        /**
         * Helpers
         */

        internal static function updateTextInput(compontent:TextInput, value:String):void
        {
            compontent.text = value;
            const event:TextOperationEvent = new TextOperationEvent(TextOperationEvent.CHANGE, false, true);
            compontent.dispatchEvent(event);
        }
    }
}

我想我只需要睡一会儿。 我的测试失败的原因是双向绑定仅在您将它们指定为双向绑定时才可以用作双向绑定。

错误(单向绑定):

 text="{_parameters.reportName}"

正确(双向绑定:

 text="@{_parameters.reportName}"

适当地指定两个绑定是使事情正常进行所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM