2017-09-28 2 views
0

Ce que j'essaye de réaliser est de boucher un appel qui retournera un certaine valeur. Cette valeur de retour consiste en l'un des paramètres transmis et une nouvelle valeur.Comment puis-je obtenir le (s) argument (s) d'un stub dans sinon et utiliser l'un des arguments + autres données pour la valeur de retour d'un appel de bouchons particulier

Comment puis-je saisir l'argument d'un talon et l'utiliser pour former une valeur de retour pour un appel stub donné

Par ex

mockDb.query.onCall(0).return(
    Tuple(this.args(0), "Some other data"); 
); 

Je sais que je peux le faire:

sinon.stub(obj, "hello", function (a) { 
    return a; 
}); 

Cependant, cela fonctionne sur le talon entier et non un appel stub individuel. Malheureusement, je ne suis pas en mesure de fournir un talon différent pour les différents appels, car j'ai juste un objet (le talon db).

Répondre

1

Pour accéder aux paramètres de la fonction sur le premier appel stub vous pouvez utiliser:

sinon.stub(obj, "method").onCall(0).callsFake(function(arg) { 
    return "data" + arg; 
}); 

Cela fera premier appel sur le talon pour revenir concaténés « données » avec l'argument passé. J'ai testé avec le nœud v7.10 et sinon v4. Ci-dessous un script de test complet:

const sinon = require('sinon'); 
let obj = { 
    test: (arg1, arg2) => { 
     return arg1 + arg2; 
    } 
} 

let stub = sinon.stub(obj, "test"); 
stub.onCall(0).callsFake((arg1, arg2) => { 
    return "STB" + arg1 + arg2; 
}) 


console.log(stub("lol", "lol2")); // -> STBlollol2 
console.log(stub("lol", "lol3")); // -> undefined 
+0

Cela ne semble pas fonctionner. J'ai l'erreur suivante: ".callsFake n'est pas une fonction". En lisant la spécification, il semble que callsFake est sur le talon entier et pas un par appel individuel. –

+0

J'ai étendu ma réponse pour inclure l'exemple. Peut-être n'ai-je pas bien compris ce que vous vouliez dire. – barnski