2013-03-26 7 views
3

Я хочу следить за функцией, а затем выполнять обратный вызов при завершении функции/начальном вызове.Как получить обратный вызов при выполнении функции JS с помощью шпиона

Ниже немного упрощенно, но показывает, что мне нужно выполнить:

//send a spy to report on the soviet.GoldenEye method function 
var james_bond = sinon.spy(soviet, "GoldenEye"); 
//tell M about the superWeapon getting fired via satellite phone 
james_bond.callAfterExecution({ 
    console.log("The function got called! Evacuate London!"); 
    console.log(test.args); 
}); 

Можно ли это сделать в Синоне? Альтернативные библиотеки приветствуют, если они решают мою проблему :)

ответ

3

Вы должны stub функция. Из документов:

stub.callsArg(index);

Вызывает заглушку для вызова аргумента на условии индекса в качестве функции обратного вызова. stub.callsArg (0); приводит к тому, что заглушка вызывает первый аргумент в качестве обратного вызова.

var a = { 
    b: function (callback){ 
    callback(); 
    console.log('test') 
    } 
} 

sinon.stub(a, 'b').callsArg(0) 
var callback = sinon.spy() 
a.b(callback) 

expect(callback).toHaveBeenCalled() 
//note that nothing was logged into the console, as the function was stubbed 
3

Это неуклюжее, но вы можете:

//send a spy to report on the soviet.GoldenEye method function 
var originalGoldenEye = soviet.GoldenEye; 

var james_bond = sinon.stub(soviet, "GoldenEye", function() { 
    var result = originalGoldenEye.apply(soviet, arguments); 

    //tell M about the superWeapon getting fired via satellite phone 
    console.log("The function got called! Evacuate London!"); 
    console.log(arguments); 
    return result; 
});