Javascript 如何使用Sinon.js模拟传递到函数中的对象?
我在输入字段上有一个函数,它在用户输入的值上添加一个百分号。该函数如下所示:Javascript 如何使用Sinon.js模拟传递到函数中的对象?,javascript,unit-testing,mocking,sinon,Javascript,Unit Testing,Mocking,Sinon,我在输入字段上有一个函数,它在用户输入的值上添加一个百分号。该函数如下所示: addPercentSign: function (oEvent, control) { var inputVal = oEvent.getParameters().value; var inputNumber = parseFloat(inputVal); if (inputNumber) { if (inputNumber < 50 || inputNumber > 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 + "%";
control.learningCurve.setValue(finalOutput);
};
}
}
addPercentSign:功能(事件、控制){
var inputVal=oEvent.getParameters().value;
变量inputNumber=parseFloat(inputVal);
如果(输入编号){
如果(输入编号<50 | |输入编号>100){
返回null;
}否则{
var finalVal=输入编号。固定(1);
var finalOutput=finalVal+“%”;
control.learningCurve.setValue(最终输出);
};
}
}
由于此函数依赖于事件对象,如何“模拟”参数(使用Sinon.js)来创建此函数的单元测试
因为oEvent对象是我们检索用户输入的方式,所以我不确定编写这个特定测试的策略是什么?可能是存根?您可以通过以下方式实现您的目标:
test('adds a percent sign to user input above 50', () => {
// Create a stubbed input event so we can control the input value
var inputEvent = {
getParameters: sinon.stub().returns({ value: '51' })
}
// Create a spy so we can observe any calls to `setValue`
// and assert the output value is correct
var setValue = sinon.spy();
var control = {
learningCurve: { setValue: setValue }
}
// Execute unit-under-test
addPercentSign(inputEvent, control)
// Assert `setValue` called with our expected output value.
assert(setValue.calledWith('51.0%'))
});
谢谢你的回答,这个解决方案很有意义,但是测试还没有通过。我收到一个错误,上面写着“control.learningCurve.setValue不是函数”。很抱歉,
control
存根中有一个小错误。有更新!谢谢如果您有兴趣看一看,我还有一个关于同一主题的问题: