2016-07-02 11 views
2

Nach der Dokumentation von sinon.js, kann ich das tun: var spy = sinon.spy(myFunc);, aber es funktioniert nicht. Hier ist mein Aufwand:Sinon Spion für Funktion funktioniert nicht

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

Mögliche Duplikat [Funktionsaufruf überprüfen und Argumenten sinon Spione Inspektion] (https://stackoverflow.com/questions/29800733/verifying-function-call-and-inspecting-arguments-using-sinon-spies) –

Antwort

2

Sinon wickelt den Aufruf es nicht alle Referenzen Patch. Der Rückgabewert ist eine umbrochene Funktion, auf die Sie Assertionen anwenden können. Es zeichnet alle Anrufe auf und nicht die Funktion, die es umschließt. Durch die Änderung von foo, so dass der Anrufer eine Funktion zur Verfügung stellt, kann der Spion eingespielt werden, und Anrufe können auf dem Spion getätigt werden.

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

danke, es funktioniert, aber ohne 'barSpy.restore();' –