Si j'ai créé une instance par var a = sinon.createStubInstance(MyContructor)
.
Comment puis-je remplacer une fonction stubbed telle que var stub = sinon.stub(object, "method", func);
.
La raison principale pour laquelle je le fais est que vous souhaitez obtenir une solution de contournement de rappel multiple comme cela mentionné
Je ne pense pas que cela ait beaucoup de sens, car si vous remplacez un talon par un autre talon ... alors pourquoi ne pas utiliser le premier talon pour réaliser ce que vous voulez faire avec le deuxième talon.
Quoi qu'il en soit, la sinon.stub(object, "method", func)
effectue les opérations suivantes en fonction de la documentation:
Remplace
object.method
par unefunc
, encapsulée dans un espion. Comme d'habitude,object.method.restore()
; peut être utilisé pour restaurer la méthode d'origine.
Donc, si vous voulez remplacer une fonction de stub d'une instance de stub, pourquoi ne le faites-vous pas:
var a = sinon.createStubInstance(MyConstructor);
a.method = sinon.spy(function() { return "Foo Bar"; });
Ou si vous voulez créer un talon au lieu d'un espion:
var a = sinon.createStubInstance(MyConstructor);
a.method = sinon.stub();
Après avoir stubé un objet entier à l'aide de sinon.createStubInstance(MyConstructor)
ou sinon.stub(obj)
, vous pouvez uniquement remplacer le stub en affectant un nouveau stub à la propriété (comme décrit par @ g00glen00b) ou en restaurant le stub avant de le recomposer.
var a = sinon.createStubInstance(MyConstructor);
a.method.restore();
sinon.stub(object, "method", func);
L'avantage de cela est que vous pouvez toujours appeler a.method.restore()
après avec le comportement attendu.
Il serait plus pratique que l'API de stub ait une méthode .call(func)
pour remplacer la fonction appelée par le stub après coup.
1 autre façon de remplacer la méthode à partir de 2.0 +
sinon.stub(object, "method").callsFake(func);
object.method.restore()
Il n'est pas nécessaire d'écraser le a.method
, nous pouvons plutôt utiliser callsFake
sur le a.method
directement:
const a = sinon.createStubInstance(MyContructor);
a.method.callsFake(func);