首页 > 解决方案 > SAPUI5 使用 QuuniT 测试过滤的问题

问题描述

我正在尝试使用 QUnit 在控制器中的表上测试过滤。现在我在尝试调用 onApplyFilter 函数时遇到了一些问题。我在重建这个发送到 onApplyFilter 的事件时遇到问题,特别是在模拟表时,它会给我带来各种未定义这些对象的错误,所以我不确定这是否是正确的方法。

我还尝试使用新的 sap.m.Table(...) 构建一个新表。但是这里 onApplyFilter 中的 .getBinding() 调用返回 null。

        function createTable() {
            var oTable = new sap.m.Table("idTestTable", {
                inset: true,
                headerText: "TestTable",
                headerDesign: sap.m.ListHeaderDesign.Standard,
                mode: sap.m.ListMode.None,
                includeItemInSelection: false,
            });

            var col1 = new sap.m.Column("col1", { header: new sap.m.Label({ text: "CreatedBy" }) });
            oTable.addColumn(col1);

            var col2 = new sap.m.Column("col2", { header: new sap.m.Label({ text: "InstanceID" }) });
            oTable.addColumn(col2);

            var col3 = new sap.m.Column("col3", { header: new sap.m.Label({ text: "CREATED_BY_ID" }) });
            oTable.addColumn(col3);

            var col4 = new sap.m.Column("col4", { header: new sap.m.Label({ text: "REQUESTED_BY_NAME" }) });
            oTable.addColumn(col4);  

            var col5 = new sap.m.Column("col5", { header: new sap.m.Label({ text: "OPERATION_NAME" }) });
            oTable.addColumn(col5);  

            var colItems = new sap.m.ColumnListItem("colItems", { type: "Active" });
            oTable.bindAggregation("items", "{DatabaseModel>/results}", colItems);

            var txtNAME = new sap.m.Text("txtNAME", { text: "{CreatedBy}" });
            colItems.addCell(txtNAME);

            var txtNAME2 = new sap.m.Text("txtNAME2", { text: "{InstanceID}" });
            colItems.addCell(txtNAME2);

            var txtNAME3 = new sap.m.Text("txtNAME3", { text: "{CREATED_BY_ID}" });
            colItems.addCell(txtNAME3);

            var txtNAME4 = new sap.m.Text("txtNAME4", { text: "{REQUESTED_BY_NAME}" });
            colItems.addCell(txtNAME4);

            var txtNAME5 = new sap.m.Text("txtNAME5", { text: "{OPERATION_NAME}" });
            colItems.addCell(txtNAME5);

            return oTable;
        }

无论如何,这是在我的桌子上测试过滤的有用方法还是我可以尝试其他方法?如果不是,我如何创建/实例化一个表来成功测试过滤?

这是视图的表格和控制器的功能。如前所述,该表来自 sap.m

            <Table
                id="idOwnOpenTasksTable"
                items="{path:'DatabaseModel>/results'}" 
                noDataText="{masterView>/tableNoDataText}" 
                busyIndicatorDelay="{masterView>/tableBusyDelay}" 
                growing="true" 
                growingScrollToLoad="true" 
                updateFinished="onUpdateFinished">
                <headerToolbar>
                    <Toolbar>
                        <content>
                            <ToolbarSpacer />
                            <SearchField placeholder="Filter" value="{DisplayModel>/sFilter}" showSearchButton="true" visible="true" width="auto" search="onApplyFilter">
                            </SearchField>
                        </content>
                    </Toolbar>
                </headerToolbar>
                <columns>
                        <Column width="auto">
                            <Text text="{i18n>description}" />
                        </Column>
                        <Column width="8rem" minScreenWidth="Phone" hAlign="End" demandPopin="true">
                            <Text text="{i18n>id}" />
                        </Column>
                        <Column width="8rem" minScreenWidth="Phone" hAlign="End" demandPopin="true">
                            <Text text="{i18n>request}" />
                        </Column>
                        <Column width="8rem" minScreenWidth="Desktop" hAlign="End" demandPopin="true">
                            <Text text="{i18n>operation}" />
                        </Column>
                        <Column width="8rem" minScreenWidth="Desktop" hAlign="End" demandPopin="true">
                            <Text text="{i18n>requested}" />
                        </Column>
                        <Column width="8rem" minScreenWidth="Desktop" hAlign="End" demandPopin="true">
                            <Text text="{i18n>expiryDate}" />
                        </Column>
                </columns>
                <items>
                    <ColumnListItem type="Navigation" vAlign="Middle" press="onSelectRow">
                        <cells>
                            <ObjectIdentifier title="{DatabaseModel>CreatedBy}" />
                            <ObjectAttribute text="{DatabaseModel>CREATED_BY_ID}" />
                            <ObjectAttribute text="{DatabaseModel>REQUESTED_BY_NAME}" />
                            <ObjectAttribute text="{DatabaseModel>OPERATION_NAME}" />
                            <ObjectAttribute text="{
                                path: 'DatabaseModel>CreatedOn',
                                formatter: '.Formatter.convertUnixTimestamp'
                            }" />
                            <ObjectAttribute text="{
                                path: 'DatabaseModel>ExpiryDate',
                                formatter: '.Formatter.convertUnixTimestamp'
                            }" />
                        </cells>
                    </ColumnListItem>
                </items>
            </Table>
onApplyFilter: function(oEvent){
            var sQuery = oEvent.getParameter("query");
            var oFilter = new Filter([
                new Filter("CreatedBy", FilterOperator.Contains, sQuery),
                new Filter("InstanceID", FilterOperator.Contains, sQuery),
                new Filter("CREATED_BY_ID", FilterOperator.EQ, sQuery),
                new Filter("REQUESTED_BY_NAME", FilterOperator.Contains, sQuery),
                new Filter("OPERATION_NAME", FilterOperator.Contains, sQuery)
            ]);
            var oTable = oEvent.getSource().getParent().getParent();
            oTable.getBinding("items").filter(oFilter, "Application");
        }

标签: javascriptunit-testingtestingfiltersapui5

解决方案


推荐阅读