2016-07-02 6 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

シノンはすべての参照を修正するわけではありません。戻り値はラップされた関数で、アサーションをオンにすることができます。それは、それが行ったすべての呼び出しを記録し、ラップする関数は記録しません。呼び出し側が関数を提供するように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();' –

関連する問題