2016-12-15 4 views
0

Используя qUnit, я пытаюсь выполнить модульную проверку функции («awardDateFormatCheck»), которая просто состоит из сеттеров в DOM.Как я могу тестировать функцию, состоящую из сеттеров в DOM?

Одним из основных правил модульного тестирования является выделение ваших модульных тестов, чтобы гарантировать, что они не несут никаких зависимостей. Имея это в виду, какая рекомендуемая стратегия для написания модульного теста для функции, о которой я говорю? Я не уверен, что лучший способ проверить свою функцию, когда это единственная цель состоит в том, чтобы setValueState() и setValueText() ...

formatter.js (происхождение функции я хотел бы проверить)

awardDateFormatCheck: function (oEvent, control) { 

      var inputVal = oEvent.getParameters().value; 

      if (inputVal.match(/\//g) || inputVal === "") { 
       control.awardDate.setValueState("None"); 
      } else { 
       control.awardDate.setValueState("Warning"); 
       control.awardDate.setValueStateText("Invalid Entry. Use 'yyyyMMdd' format"); 
      }; 
     } 

viewControls.js (содержит идентификатор элемента DOM для наладчиков)

sap.ui.define([],function() { 

    return { 

     main: function() { 

      var awardDate = this.byId("priorAwardDateInput"); 

      return { 
       awardDate: awardDate 
      }; 
     } 
    }  
}); 

View.html (см DatePicker Eleme нт, свойство 'изменить', где/когда функция называется прибудете-х)

<mvc:View 
     controllerName="pricingTool.controller.Main" 
     xmlns:l="sap.ui.layout" 
     xmlns:core="sap.ui.core" 
     xmlns:f="sap.ui.layout.form" 
     xmlns:mvc="sap.ui.core.mvc" 
     xmlns="sap.m"> 

    <l:Grid class="sapUiSmallMarginTop" hSpacing="1" vSpacing="1" defaultSpan="L4 M9 S9"> 
     <l:content> 
      <l:HorizontalLayout allowWrapping="true"> 
       <l:VerticalLayout width="100%"> 
        <Label id="priorAwardDateLabel" text="Prior Award Date" design="Bold" textAlign="Center" required="true" /> 
        <DatePicker id="priorAwardDateInput" placeholder="Select Award Date.." displayFormat="yyyy-MM-dd" type="Date" change="awardDateFormatCheck" width="100%"> 
        </DatePicker> 
       </l:VerticalLayout> 
      </l:HorizontalLayout> 
     </l:content> 
    </l:Grid> 

</mvc:View> 

Main.controller.js (где функция вызывается из)

sap.ui.define([ 
     'jquery.sap.global', 
     'sap/ui/core/mvc/Controller', 
     'sap/ui/model/json/JSONModel', 
     'path/to/formatter', 
     'path/to/viewControls 
    ], 

    function (jQuery, Controller, JSONModel, formatter) { 
     "use strict"; 


     var mainController = Controller.extend("pricingTool.controller.Main", { 


      awardDateFormatCheck: function (oEvent) { 
       formatter.awardDateFormatCheck(oEvent, controls); 
      }, 

     }); 

     return mainController; 
    }); 

formatter.test. JS (шаблон тестирования QUnit у меня есть установка)

sap.ui.require(
    [ 
     'path/to/formatter', 
     'path/to/Main.controller' 
    ], 

    function (formatter, viewControls, Component, $, sinon, sinonqunit, Input) { 

     "use strict"; 

     QUnit.test("'awardDateFormatCheck' Function Exists", function (assert) { 

     // Arrange 

     // Act (How can I test a function with setters?) 

     // Assert 

     // Cleanup  


     }); 
    } 
); 
+0

Так что ваш блок в этом случае является метод «awardDateFormatCheck». И вы предоставили себе способ дать вашему коду «макет» для объекта управления. То, что вы действительно тестируете, - это условие «если» и значения, переданные вашему макету. Поэтому создайте макет для объекта «control» и укажите, что передается вашим замещенным методам на него для разных параметров события. – Adrian

ответ

1

что бы я сделал это отдельный реальный интеллект ваша функция из части «адаптера». то есть:

Изменение функции тока в

awardDateFormatCheck: function (oEvent, control) { 
     var inputVal = oEvent.getParameters().value; 

     var valueState = _awardDateFormatCheck(inputVal) 

     control.awardDate.setValueState(valueState.state); 
     if (valueState.text) { 
      control.awardDate.setValueStateText(valueState.text); 
     } 
    } 

Это один делает ОНТ должны быть протестированы, так как он просто не делает ничего ожидать передачи аргументов и значений параметров обратно. Тогда вторая функция, которую вы можете легко модульного тестирования:

_awardDateFormatCheck: function (inputVal) { 
    if (inputVal.match(/\//g) || inputVal === "") { 
      return { 
       state: "None" 
      }; 
     } else { 
      return { 
       state: "Warning", 
       text: "Invalid Entry. Use 'yyyyMMdd' format" 
      }; 
     }; 
} 
Смежные вопросы