2016-03-30 5 views
1

Код:.Sinon макет ожидает() withExactArgs (функция() {}) возвращает один раз (никогда не называли)

Model = {}; 

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

Test Case:

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) 

Я не могу понять, почему он не примет такое же определение функции, как параметр. Любые подсказки? Есть ли другой способ проверить параметры функции, выполняемые в мокко, используя синус?

ответ

1

Если вы всегда проходя ту же функцию в getDataPointValue, нет никакой необходимости, чтобы проверить, если эта функция была передана, вы можете проверить, только если первый аргумент был принят, как это:

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

Япа, но те частичное решение, так как код, находящийся в передаваемой функции, никогда не проверяется. –

+1

Он проверяет, что getDataPoint вызывается с правильными аргументами. Если вы хотите протестировать эту анонимную функцию, вы должны переформатировать ее в именованную функцию и создать для нее еще один тест. – vintem