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