Maison >interface Web >js tutoriel >Pourquoi « expect.to.throw » ne parvient-il pas à confirmer les erreurs générées dans les tests Node.js ?

Pourquoi « expect.to.throw » ne parvient-il pas à confirmer les erreurs générées dans les tests Node.js ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 15:57:03215parcourir

Why Does `expect.to.throw` Fail to Assert Thrown Errors in Node.js Tests?

Chai : Répondre à l'expect.to.throw insaisissable dans Node.js

L'expect.to.throw de Chai peut s'avérer déroutant dans Node. js tests. Malgré son objectif d'affirmer les erreurs générées, il échoue souvent lorsqu'il est appliqué directement à des extraits de code.

Comprendre le problème :

Considérez l'exemple de cas de test :

it('should throw an error if you try to get an undefined property', function (done) {
  // Passing the result of model.get('z') directly fails
  expect(model.get('z')).to.throw('Property does not exist in model schema.');
});

Ce test échoue, bien que l'erreur soit effectivement générée. Une idée fausse courante est que expect.to.throw gère la récupération et l'assertion de l'erreur générée.

Solution : adopter le passage de fonctions :

La clé pour résoudre ce problème le problème réside dans le passage d'une fonction à expect.to.throw au lieu du résultat. Cette fonction sera exécutée par expect, déclenchant la récupération et la validation de l'erreur générée :

expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.');

Dans ce code modifié, model.get est lié au contexte de l'objet modèle et 'z' est défini comme argument. Ensuite, la fonction résultante est transmise à expect.to.throw, garantissant que l'erreur prévue est capturée et affirmée.

En suivant cette approche, vous pouvez exploiter toute la puissance de expect.to.throw dans Node. js, affirmant efficacement l'apparition d'erreurs générées et garantissant la robustesse de votre code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn