如果你是对编写单元测试和“模拟”概念不熟悉的新手,那么请放心。我有一个基本函数'addPercentSign',如果用户输入在50-100之间,则会将百分号添加到用户输入中:
addPercentSign: function (oEvent, control) {
var inputVal = oEvent.getParameters().value;
var inputNumber = parseFloat(inputVal);
if (inputNumber) {
if (inputNumber < 50 || inputNumber > 100) {
return null;
} else {
var finalVal = inputNumber.toFixed(1);
var finalOutput = finalVal + "%";
//Error: cannot setValue of undefined. How can I 'stub' the line below?
control.learningCurve.setValue(finalOutput);
return finalOutput;
};
}
}
问题
我面临的问题是,当我为这个函数编写单元测试时,我无法测试返回的值(finalOutput),因为它之前的那行代码会返回一个错误,因为它依赖于DOM元素(control.learningCurve)来设置一个值。由于这是一个单元测试,我必须将这个函数与任何依赖项隔离开来。
因此,我需要“模拟”“setValue”调用。我想创建一个存根可能是有意义的,但我不确定怎么做?
这是我想要测试上述函数(addPercentSign)的单元测试代码:
function (formatter, viewControls) {
"use strict";
var testEvent = {
getParameters : function() {
return {value : 50}
}
}
QUnit.module("Formatter Functions");
QUnit.test("Add Percent Sign", function (assert) {
assert.ok(formatter.addPercentSign(testEvent, viewControls) == '50.0%', "Percent Sign Added: Pass");
});
}
问题
如何模拟setter以便在没有DOM依赖的情况下对此函数进行单元测试?
control.learningCurve.setValue(finalOutput)