2017-08-11 1 views

Répondre

2

En raison de la façon dont une fonction cogne Sinon dans un module, vous finissons avec une situation intéressante. Votre fonction est en train d'être bloquée, mais elle est bloquée uniquement au module.exports.foo. Votre fonction d'origine foo est inchangée. En gros ce que fait Sinon, c'est qu'il enveloppe votre module.exports.{function} avec leurs fonctionnalités spéciales.

Si vous souhaitez que des stubs persistent dans votre fonction bar, vous devez référencer foo sur l'objet d'exportation et non directement.

function bar() { 
    return module.exports.foo() + 1; 
} 

Bonne chance :)

EDIT: Habituellement, quand je veux faire des choses comme cela, j'écris mes modules et d'utiliser leurs fonctions de cette façon ...

// module A 

exports.foo = function foo() { 
    return 1; 
} 

exports.bar = function bar() { 
    return exports.foo() + 1; 
} 

De cette façon Si quelque chose dans le module est stubbed/mocked/spied, il s'appliquera à tous les autres appels à l'intérieur du module. Mais en général, ma recommandation est que si vous envisagez de planifier une fonction, vous ne voudrez jamais la référencer directement depuis n'importe où. Vous devez référencer ces fonctions à travers un objet afin que Sinon puisse effectuer le remplacement sur l'objet.

+0

qui a fonctionné! merci – Adrian

+0

Pas de soucis! J'ai ajouté une alternative que vous pouvez essayer dans votre module. Je trouve que cela fonctionne toujours pour moi quand j'ai besoin de remplacer des fonctions dans un module. –