如何使用sinon.js模拟传递到函数的对象



我在输入字段上具有一个函数,该功能从用户输入中的值增加了一个百分数的符号。该功能看起来如下:

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);
    };
  }
}

由于此函数依赖于事件对象,因此如何"模拟"参数(使用sinon.js)来为此功能创建单元测试?

由于ovent对象是我们检索用户输入的方式,因此我不确定要编写此特定测试的策略是什么?可能是存根?

您可以通过以下内容实现自己的追求:

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%'))
});

最新更新