2

代码 :

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 中的函数的函数参数?

4

1 回答 1

2

如果您总是将相同的函数传递给 getDataPointValue,则无需测试该函数是否已通过,您可以仅测试第一个参数是否像这样传递:

mock.expects('getDataPointValue').once().withArgs(dataPoints);
于 2016-04-05T00:13:56.697 回答