Qu'est-ce que assert
signifie en JavaScript ?
J'ai vu quelque chose comme :
assert(function1() && function2() && function3(), "some text");
Et j'aimerais savoir quelle est la méthode assert()
fait.
Qu'est-ce que assert
signifie en JavaScript ?
J'ai vu quelque chose comme :
assert(function1() && function2() && function3(), "some text");
Et j'aimerais savoir quelle est la méthode assert()
fait.
Il n'y a pas de norme assert
dans JavaScript lui-même. Vous utilisez peut-être une bibliothèque qui en fournit une ; par exemple, si vous utilisez Node.js, vous utilisez peut-être la bibliothèque module d'assertion . (Les navigateurs et les autres environnements qui offrent une console mettant en œuvre l'option API de la console fournir console.assert
.)
La signification habituelle d'un assert
est de lancer une erreur si l'expression passée dans la fonction est fausse ; cela fait partie du concept général de la fonction vérification des assertions . En général, les assertions (comme on les appelle) ne sont utilisées que dans les versions de "test" ou de "débogage" et sont exclues du code de production.
Supposons que vous ayez une fonction qui soit censée toujours accepte une chaîne de caractères. Vous voudriez savoir si quelqu'un a appelé cette fonction avec quelque chose qui n'était pas une chaîne (sans avoir une couche de vérification de type comme TypeScript ou Flow). Vous pourriez donc le faire :
assert(typeof argumentName === "string");
...où assert
entraînerait une erreur si la condition était fausse.
Une version très simple ressemblerait à ceci :
function assert(condition, message) {
if (!condition) {
throw message || "Assertion failed";
}
}
Mieux encore, utilisez l'outil Error
qui a l'avantage de collecter une trace de la pile et autres :
function assert(condition, message) {
if (!condition) {
throw new Error(message || "Assertion failed");
}
}
...qui s'insurge contre les types en JS ? Je dirais que c'est l'une des pires raisons de... assert
.
@cHao : Il y a des cas d'utilisation valables. C'est juste le premier exemple qui m'est venu à l'esprit. L'exemple n'est pas la question. C'est le concept d'assertions qui est important.
Quelque chose que j'ai ajouté à mon code à l'intérieur du if(!condition)
est en train d'établir var throwError=true;
puis debugger;
puis envelopper la section "throw" dans un if(throwError)
. De cette façon, si j'ai le débogueur ouvert, il se cassera, et si je le souhaite, je peux mettre throwError
à false et ensuite examiner tous les scopes en sortant.
Pour info, cela ressemble plus à console.error
dans la mesure où le code continue à s'exécuter.
@DanielSokolowski, Exactement. console.assert
n'est pas si bon que cela, à moins qu'il ait le même comportement que throw
.
La raison pour laquelle l'exécution continue après console.assert
c'est parce que les assertions ne sont pas des fonctions de gestion des erreurs. Elles sont conçues pour vérifier la correction du code pendant le développement uniquement. Traditionnellement, elles sont complètement désactivées dans les environnements de production afin d'éviter que les systèmes actifs ne s'arrêtent à cause d'une erreur banale. Le navigateur est considéré comme un environnement de production. console.assert
ne termine pas l'exécution à cet endroit. Si vous comptez sur les assertions pour arrêter l'exécution, vous devriez plutôt utiliser un traitement d'erreur approprié, car les assertions ne sont pas faites pour cela.
Les autres réponses sont bonnes : il n'y a pas de fonction assert intégrée à ECMAScript5 (c'est-à-dire un JavaScript qui fonctionne pratiquement partout) mais certains navigateurs vous la donnent ou ont des modules complémentaires qui fournissent cette fonctionnalité. Bien qu'il soit probablement préférable d'utiliser une bibliothèque bien établie / populaire / maintenue pour cela, à des fins académiques, une fonction "assert du pauvre" pourrait ressembler à quelque chose comme ceci :
const assert = function(condition, message) {
if (!condition)
throw Error('Assert failed: ' + (message || ''));
};
assert(1 === 1); // Executes without problem
assert(false, 'Expected true');
// Yields 'Error: Assert failed: Expected true' in console
Par ailleurs, on pourrait facilement modifier ce code de façon à ce qu'il ne génère une erreur que dans les environnements de développement (par exemple, en ajoutant un autre if ou une autre condition) et qu'il ne fasse rien ou n'affiche qu'un avertissement. Personnellement, je pense que les assertions ne devraient être utilisées que dans le code de test (par exemple, pour vérifier si les résultats attendus et réels correspondent) ; dans le code de production, elles devraient être soit superflues (garanties correctes par conception) et donc supprimées, soit uniquement pour protéger les entrées utilisateur/externes, auquel cas elles peuvent être remplacées par une logique d'assainissement et un traitement standard des exceptions (par exemple, les assertions de type "sanitizing"). try
, catch
, throw
)
Vérifiez ça : http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/
c'est pour tester JavaScript. Étonnamment, avec à peine cinq ou six lignes, ce code offre un grand niveau de puissance et de contrôle sur votre code, lors des tests.
La fonction assert accepte deux paramètres :
résultat : Un booléen, qui indique si votre test a réussi ou échoué.
description : Une courte description de votre test.
La fonction assert crée alors simplement un élément de liste, applique une classe "pass" ou "fail", selon que le test renvoie vrai ou faux, puis ajoute la description à l'élément de liste. Enfin, ce bloc de code est ajouté à la page. C'est incroyablement simple, mais cela fonctionne parfaitement.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.