Sinon: Espions nommés

Créé le 25 févr. 2013  ·  13Commentaires  ·  Source: sinonjs/sinon

Cela aiderait à la lisibilité des messages d'erreur d'assertion si des espions (autres que ceux de propriété d'objet) pouvaient être créés avec des noms. Par exemple, les espions Jasmine le permettent.

Help wanted

Commentaire le plus utile

Je vois ça; il dit toujours que le nom est proxy - mais si i Object.defineProperty(spy, 'name', { value: 'new name' }) alors il signale "nouveau nom".

Ce serait formidable de rouvrir cela.

Tous les 13 commentaires

Sinon inspecte le nom de la fonction encapsulée. Vous pouvez donc nommer l'espion en enveloppant une fonction nommée vide.

var spy = sinon.spy(function doStuff() {});

Cette technique permet également de produire une fonction avec une longueur spécifique:

var spy = sinon.spy(function doStuff(a, b, c) {}); // spy.length === 3

Pour autant que je sache, c'est toujours "proxy" comme nom de fonction. Etes-vous sûr que ce commentaire est vrai?

Pour autant que je sache, c'est toujours "proxy" comme nom de fonction. Etes-vous sûr que ce commentaire est vrai?

Cela vous dérangerait-il de publier un exemple exécutable?

// test/index.js
var sinon = require('sinon');

var spy = sinon.spy(function doStuff() {
    console.log('Name: ' + spy.name);
});

spy();
➜  sinon-test node test/index.js 
Name: proxy

Je ne me souviens pas de ce que j'ai fait auparavant, mais j'obtenais une sortie Mocha suite à des tests échoués où le nom de la fonction était "proxy" et vous ne sauriez pas que c'était "doStuff". Si je peux me souvenir de ce que c'était exactement, je posterai

Je vois ça; il dit toujours que le nom est proxy - mais si i Object.defineProperty(spy, 'name', { value: 'new name' }) alors il signale "nouveau nom".

Ce serait formidable de rouvrir cela.

J'ai contourné cela grâce à ce qui suit:

const mapMethod = sinon.spy(Array.prototype, 'map');
const methodName = map.wrappedMethod.name;
console.log(methodName); // 'map'

@Tbhesswebber qui ne fonctionne pas lorsque le code non-test repose sur le nom de la fonction.

Ah ... excellent point. Je travaille sur des programmes d'enseignement de fonctions d'ordre supérieur (en utilisant Array.prototype comme point de départ), ce qui m'a conduit à ce problème. Cas d'utilisation très différent!

PS - tester les détails de l'implémentation est vraiment fastidieux lorsque vous essayez!

Je peux voir comment cela serait utile. Si quelqu'un veut approfondir cela, ce serait cool.

Il se peut que certaines fonctionnalités ou tests dépendent du nom de la fonction renvoyée. Si tel est le cas, nous devrions discuter de la manière de le contourner.

@mroderick lors de la création d'un espion avec un original, Object.defineProperty(spy, 'name', { configurable: true, value: spy.wrappedMethod.name }) devrait le faire?

Je pense que c'était une fonctionnalité que nous avions - nommer l'espion en donnant un nom à la fonction - je suppose qu'elle s'est perdue en cours de route. Je suis d'accord avec la proposition d'autoriser le nommer explicitement. Mais ne devrions-nous pas également changer le nom du «proxy»? J'ai l'impression qu'une fonction espionnée doit ressembler le plus possible à celle d'origine. Nous garantissons la bonne arité, mais nous changeons le nom maintenant. Cela semble faux.

Je viens de réaliser que nous avons aussi spy.named(name) dans l'API 😆 Cela définit une propriété displayName sur l'espion. Il faudrait aussi changer le nom des fonctions, je pense. Jetez un œil à cela maintenant.

Le patch de # 1987 est sorti dans v7.2.7 . S'il vous plaît laissez-nous savoir si cela est satisfaisant pour tout le monde ❤️

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

Questions connexes

NathanHazout picture NathanHazout  ·  3Commentaires

ndhoule picture ndhoule  ·  4Commentaires

zimtsui picture zimtsui  ·  3Commentaires

fearphage picture fearphage  ·  4Commentaires

stevenmusumeche picture stevenmusumeche  ·  3Commentaires