如何为将事件对象作为依赖项传递的函数创建单元测试?

时间:2016-12-06 19:27:20

标签: 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) {
      return null;
    } else {
      var finalVal = inputNumber.toFixed(1);
      var finalOutput = finalVal + "%";

      control.learningCurve.setValue(finalOutput);
    };
  }
}

由于此函数依赖于Event对象,我如何“模拟”参数(oEvent对象)(使用Sinon.js或mocks)为此函数创建单元测试?单元测试的经验法则是尽可能地隔离单元(addPercentSign函数)而没有任何依赖性。

由于oEvent对象是我们检索用户输入的方式,我不确定编写此特定测试的策略是什么?我只是在单元测试中创建一个看起来与事件对象相同的对象吗?

QUnit.test("Check for Percent Sign", function (assert) {

        var testOEvent = {value: '25'}

        assert.ok(formatter.addPercentSign(testOEvent) == 25, "Test");

    });

1 个答案:

答案 0 :(得分:0)

使用一个对象来调用此函数,该对象模拟您的函数所使用的事件的所有接口。

例如:

var testOEvent = {
   getParameters:function(){
      return {value:"1.0"}
   }
}