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 を使用してモカの関数である関数パラメータをテストする別の方法はありますか?

4

1 に答える 1

2

常に同じ関数を getDataPointValue に渡す場合、その関数が渡されたかどうかをテストする必要はありません。最初の引数が次のように渡されたかどうかのみをテストできます。

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