【问题标题】:Sinon mock expects().withExactArgs(function() {}) returns once (never called)Sinon mock expects().withExactArgs(function() {}) 返回一次(从不调用)
【发布时间】:2016-03-30 22:28:40
【问题描述】:

代码:

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

【问题讨论】:

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


    【解决方案1】:

    如果您总是将相同的函数传递给 getDataPointValue,则无需测试该函数是否已传递,您只需测试第一个参数是否传递如下:

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

    【讨论】:

    • 是的,但这是部分解决方案,因为从不检查传入的函数中的代码。
    • 它测试 getDataPoint 是否使用正确的参数调用。如果你想测试那个匿名函数,你应该将它重构为一个命名函数并为此创建另一个测试。
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多