web-dev-qa-db-fra.com

Flutter: test qu'une exception spécifique est levée

en bref, throwsA(anything) ne me suffit pas lors des tests unitaires dans Dart. Comment tester un message ou type d'erreur spécifique?

Voici l'erreur que je voudrais attraper:

class MyCustErr implements Exception {
  String term;

  String errMsg() => 'You have already added a container with the id 
  $term. Duplicates are not allowed';

  MyCustErr({this.term});
}

voici l'assertion actuelle qui passe, mais voudrait vérifier le type d'erreur ci-dessus:

expect(() => operations.lookupOrderDetails(), throwsA(anything));

Voici ce que je veux faire:

expect(() => operations.lookupOrderDetails(), throwsA(MyCustErr));

10
xpeldev

Cela devrait faire ce que vous voulez:

expect(() => operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));

expect(() => operations.lookupOrderDetails(), isInstanceOf<MyCustErr>());

si vous voulez juste vérifier l'exception, vérifiez ceci réponse :

8
Günter Zöchbauer

Après que "TypeMatcher <>" a été déprécié dans Flutter 1.12.1, j'ai trouvé que cela fonctionnait:

expect(() => operations.lookupOrderDetails(), throwsA(isInstanceOf<MyCustErr>()));
3
Ber

Importez d'abord le package correct 'package: matcher/matcher.Dart';

expect(() => yourOperation.yourMethod(),
      throwsA(const TypeMatcher<YourException>()));
0
Rajat Arora

Au cas où quelqu'un voudrait tester avec une fonction asynchrone comme je devais faire, tout ce que vous avez à faire est d'ajouter le mot clé async dans l'attente, en gardant à l'esprit que le lookupOrderDetails est une fonction asynchrone:

expect(() **async** => **await** operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));

expect(() **async** => **await** operations.lookupOrderDetails(), isInstanceOf<MyCustErr>()));

Il utilise toujours la réponse de Gunter qui est très bonne!

0
Mihai Neagoe