2016-07-02 4 views
2

Согласно документации sinon.js, я могу сделать вот так: var spy = sinon.spy(myFunc);, но это не сработает. Вот мои усилия:Sinon шпион для функции не работает

var sinon = require("sinon"); 

describe('check bar calling', function(){ 
    it('should call bar once', function() { 
    var barSpy = sinon.spy(bar); 

    foo("aaa"); 

    barSpy.restore(); 
    sinon.assert.calledOnce(barSpy); 
    }); 
}); 

function foo(arg) { 
    console.log("Hello from foo " + arg); 
    bar(arg); 
} 

function bar(arg) { 
    console.log("Hellof from bar " + arg); 
} 
+0

Возможный дубликат [Проверка вызова функции и проверки аргументов с помощью Sinon шпионов] (https://stackoverflow.com/questions/29800733/verifying-function-call-and-inspecting-arguments-using-sinon-spies) –

ответ

2

Sinon завершает вызов, он не исправляет все ссылки. Возвращаемое значение представляет собой завернутую функцию, в которую вы можете включить утверждения. Он записывает все сделанные на него вызовы, а не ту функцию, которую она обертывает. Изменение foo так, чтобы вызывающая функция предоставляла функцию, позволяющую вводить шпион, и позволяет делать вызовы на шпиона.

var sinon = require("sinon"); 

describe('check bar calling', function(){ 
    it('should call bar once', function() { 
    var barSpy = sinon.spy(bar); 

    foo("aaa", barSpy); 

    barSpy.restore(); 
    sinon.assert.calledOnce(barSpy); 
    }); 
}); 

function foo(arg, barFn) { 
    console.log("Hello from foo " + arg); 
    barFn(arg); 
} 

function bar(arg) { 
    console.log("Hellof from bar " + arg); 
} 
+0

спасибо, это работает, но без 'barSpy.restore();' –

Смежные вопросы