Sinon mock expect()。withExactArgs(function(){})返回一次(从不调用)

时间:2016-03-30 22:28:41

标签: javascript mocha sinon mocha-phantomjs sinon-chai

代码:

Model = {};

var functionToTest = function (dataPoints) {
    return Model.getDataPointValue(dataPoints, function (dataPoint) {
        if (dataPoint.unit === 'unit') {
            return dataPoint.value;
        }
    });
};
Model.functionToTest = functionToTest;

测试用例:

  describe ('functionToTest', function () {
    it ('validates correct value is returned', function () {
      var dataPoints = [{
        'unit': 'unit',
        'value' : 1
      }];

      var mock = sinon.mock(Model);
      mock.expects('getDataPointValue').once().withExactArgs(dataPoints, function (dataPoint) {
        if (dataPoint.unit === 'unit') {
          return dataPoint.value;
        }
      });

      Model.functionToTest(dataPoints);

      mock.verify();
    });
  });

回应:

ExpectationError: Unexpected call: getDataPointValue([{ unit: "unit", value: 1 }], function () {})
    Expected getDataPointValue([{ unit: "unit", value: 1 }], function () {}) once (never called)

我无法弄清楚为什么它不会接受与参数相同的函数定义。有线索吗? 有没有一种不同的方法来测试函数参数是使用sinon在mocha中的函数?

1 个答案:

答案 0 :(得分:2)

如果你总是将相同的函数传递给getDataPointValue,那么就不需要测试该函数是否被传递,你只能测试第一个参数是否像这样传递:

mock.expects('getDataPointValue').once().withArgs(dataPoints);