2016-05-07 14 views
0

ist es möglich, Sinon spy on Funktionsausdrücke zu machen? Schauen Sie sich diesen Code an.Sinon spy on Funktionsausdruck

function one() { return 1; } 
 
function two() { return 2; } 
 
function three() { return 3; } 
 

 
function myMethod() { 
 
    var n1 = one(); 
 
    var n2 = two(); 
 
    var n3 = three(); 
 
    return n1 + n2 + n3; 
 
} 
 

 

 
QUnit.module('My test'); 
 

 
QUnit.test('testing functions', (assert) => { 
 
    assert.expect(3); 
 
    
 
    const spyOne = sinon.spy(one); 
 
    const spyTwo = sinon.spy(two); 
 
    const spyThree = sinon.spy(three); 
 
\t myMethod(); 
 

 
    assert.ok(spyOne.called, "called one"); 
 
    assert.ok(spyTwo.called, "called two"); 
 
    assert.ok(spyThree.called, "called three"); 
 
    
 
    sinon.restore(); 
 
});

Auch wenn ich myMethod() nennen, und ich habe spioniert one - two - three noch falsch ich auf one.called (gleich für two und three)

Was ich hier fehlt?

Danke!

+0

Mögliches Duplikat von [Funktionsaufruf prüfen und Argumente mit sinon spies prüfen] (https://stackoverflow.com/questions/29800733/verifying-function-call-and-inspecting-arguments-using-sinon-spies) –

Antwort

3

sinon.spy(fn) Aufruf nicht fn ändern, ist es nur schafft eine neue Funktion (der Spion), die fn nennen.

für Sie in der Lage sein one zu testen, two, three, müssen Sie diese Funktionen (oder besser gesagt, ihre Referenzen) mit Spionen ersetzen, und diese wiederherstellen, danach:

// keep references to the original functions 
var _one = one; 
var _two = two; 
var _three = three; 

// replace the original functions with spies 
one = sinon.spy(one); 
two = sinon.spy(two); 
three = sinon.spy(three); 

// call our method 
myMethod(); 

// test 
assert.ok(one.called, "called one"); 
assert.ok(two.called, "called two"); 
assert.ok(three.called, "called three"); 

// restore the original functions 
one = _one; 
two = _two; 
three = _three; 

Es ist zwar nicht ideal, und wenn möglich würde ich wahrscheinlich alle Funktionen zu einem Objekt zusammenfassen. Dies würde es Sinon auch ermöglichen, die Originale selbst wiederherzustellen.