Sinon: Comment pouvons-nous ignorer le rejet de la création d'un nouvel objet d'erreur?

Créé le 1 févr. 2018  ·  6Commentaires  ·  Source: sinonjs/sinon

https://github.com/sinonjs/sinon/blob/4310343393b16b92b56526ab4614da4eb2886efa/lib/sinon/default-behaviors.js#L176

Je maintiens du code qui rejette les chaînes et cela crée des problèmes lors des tests. mes prises de merle bleu ne se comportent pas correctement.

bluebird.rejects('Something')
    .catch(e => e === 'Something' /* true */, () => console.log(typeof e) /*string*/)
    .catch(() => console.log('should not be here'));

Cependant, l'utilisation de sinon.stub().usingPromise('bluebird').rejects('Something'); finit par créer un objet d'erreur avec le nom Something. Pas du tout prévu.

Avant que quelqu'un ne dise que nous ne soutenons que les promesses natives, examinons ce qu'ils font!

Promise.reject('Something')
     .catch(e => {
        console.log(e === 'Something'); // true
        console.log(typeof e); // string
    });

Hmmm, ils ne créent pas de classe Error, ils lancent simplement l'exception qui lui a été donnée comme un lancer.

try { 
    throw 'Something'; 
} catch (e) { 
    console.log(e === 'Something');  // true
    console.log(typeof e); // string
}
Bug Help wanted pinned

Commentaire le plus utile

Stack trace l'utilité et les discussions sur la question de savoir s'il faut créer des objets d'erreur de côté, je suis d'accord que généralement

const example = sinon.stub().rejects(something);

devrait se comporter de la même manière que

const example = () => Promise.reject(something);

Actuellement, ce n'est pas le cas si something est une chaîne. Je dirais que le comportement actuel est un bug.

Tous les 6 commentaires

Avant que quelqu'un ne dise que nous ne soutenons que les promesses natives, examinons ce qu'ils font!

C'est une erreur d'homme de paille . Vous savez assez bien que nous prenons en charge les bibliothèques de promesse, telles que vous les utilisez dans votre exemple.

Les responsables Sinon sont pleinement conscients du fonctionnement des promesses JavaScript, notamment que Promise.reject() transmettra tout ce que vous lui transmettez.

Je maintiens du code qui rejette les chaînes

À mon avis, rejeter les promesses avec String au lieu de Error rend vraiment un mauvais service à Future Developer, qui doit déboguer ce que nous écrivons aujourd'hui. Les chaînes ne sont pas très utiles pour le débogage, car elles ne capturent pas les traces de pile. Error d'autre part. Par conséquent, je pense que le comportement rejects() est souhaitable, car cela facilite l'utilisation du débogueur pour trouver rapidement ce qui ne va pas.

Il semble que vous ne soyez pas d'accord, mais la seule déclaration que vous avez faite est que Sinon ne répond pas à vos attentes. Si vous pensez que le comportement par défaut doit être changé, veuillez poster des arguments pour expliquer pourquoi, en gardant à l'esprit que le changement a le potentiel d'affecter de nombreux utilisateurs.

S'il y a des arguments solides pour changer le comportement par défaut, je ne peux pas imaginer qu'aucun des responsables de Sinon s'opposerait à une pull request pour le changer.

Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Merci pour vos contributions.

Je dirais qu'il pourrait y avoir des opinions divergentes sur la question de savoir si une trace de pile est réellement utile dans certains scénarios. Dans ma situation particulière, je ne me soucie pas de la trace de la pile, je ne me soucie que du message d'erreur et de le passer ailleurs. J'ai donc écrit du code pour gérer à la fois les raisons de rejet de type String et Error. Cependant, puisque sinon fait la coercition String -> Error pour moi, je ne peux pas tester la branche de mon code qui gère les chaînes. En tant que tel, je ne peux pas obtenir une couverture complète

Stack trace l'utilité et les discussions sur la question de savoir s'il faut créer des objets d'erreur de côté, je suis d'accord que généralement

const example = sinon.stub().rejects(something);

devrait se comporter de la même manière que

const example = () => Promise.reject(something);

Actuellement, ce n'est pas le cas si something est une chaîne. Je dirais que le comportement actuel est un bug.

Je suis d'accord.

Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Merci pour vos contributions.

Cette page vous a été utile?
0 / 5 - 0 notes