【发布时间】:2017-04-21 21:11:03
【问题描述】:
编写单元测试的新手和更准确的“模拟”概念。我有一个基本函数“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)
【问题讨论】:
标签: javascript unit-testing mocking sinon qunit