C'est un sucre de syntaxe très simple:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns(Promise.resolve("hello"));
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns(Promise.reject(new Error("oh noes!"));
Ce serait du bon sucre, merci pour la suggestion @mariusGundersen
Notre équipe a une petite bibliothèque sur npm qui nous a aidés avec ce genre de chose - https://github.com/substantial/sinon-stub-promise - bien que la façon dont elle est actuellement implémentée nécessite une syntaxe stub comme: sinon.stub().returnsPromise()
. Pensées? Il semble d'après l'exemple ci-dessus que cela suppose une évaluation synchrone, non?
J'aime beaucoup la suggestion de @mariusGundersen . Autant que je sache, toutes les bibliothèques de promesse sont asynchrones tout le temps, non? Si tel est le cas, je pense que la promesse de talon devrait refléter ce comportement.
J'ai juste pensé qu'il utiliserait le Promise.resolve
disponible dans le monde entier, s'il en existe un, et sinon cela ne fonctionnerait pas. Mais le laisser renvoyer un objet avec une méthode then
est une bien meilleure solution:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns({then: x => setTimeout(() => x("hello"), 0)});
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns({then: x => undefined, catch: x => setTimeout(() => x(new Error("oh noes!")), 0)});
(écrit sur le téléphone, peut contenir des erreurs)
Notre équipe a écrit une petite bibliothèque pour fournir des fonctionnalités similaires. Peut-être que cela aidera. Il utilise la bibliothèque bluebird pour les promesses. https://www.npmjs.com/package/sinon-bluebird
+1 pour le support natif de Promise
Il y a aussi un projet appelé sinon, comme promis qui patches votre projet du module existant à l' aide sinon -promesse native seulement d'ajouter / Rejects sémantique résout les à talons.
Ce serait un atout si ceci ou les changements de l'un des autres modules pouvaient être ajoutés à sinon lui-même.
Puis-je faire un sinon.stub().returnsArg(1)
où le talon renvoie une promesse? J'essaie simplement de renvoyer l'argument comme la résolution de ma promesse. Cela ne semble pas fonctionner.
Les questions sur l'utilisation de
stub = (arg) => Promise.resolve(arg);
Idem d'ici: # 738
Bonjour à tous, tout d'abord, merci pour l'excellent travail que vous avez fait sur Sinon.
Si vous souhaitez que cela soit implémenté, j'aimerais aussi essayer, faites-le moi savoir et je commencerai à travailler dans un PR pour cela.
@lucasfcosta , merci pour cela. Je pense que @mroderick a parlé il y a longtemps de la simple intégration de sinon-as-promised
dans Sinon, n'est-ce pas? Ce serait la solution la plus simple et je n'ai aucune objection.
@lucasfcosta J'adorerais voir un PR pour intégrer sinon-as-promised
dans la branche master
Autre
Commentaire le plus utile
Puis-je faire un
sinon.stub().returnsArg(1)
où le talon renvoie une promesse? J'essaie simplement de renvoyer l'argument comme la résolution de ma promesse. Cela ne semble pas fonctionner.