Il s’agit d’un outil CI qui analyse le taux de couverture d’une pull request en ignorant les lignes qui n’ont pas été modifiées dans le PR.
Motivation
Le seuil de taux de couverture sur les outils CI est une approche courante pour encourager les développeurs à écrire des tests et à continuer d’améliorer la qualité de l’ensemble du projet. Malheureusement, juger la couverture d’une pull request en analysant la couverture de l’ensemble du projet n’est pas toujours juste, en particulier sur les grosses tâches de refactoring, ce qui peut naturellement diminuer le taux de couverture.
Ce paquet essaie une approche différente pour analyser la couverture de test. Nous analysons uniquement les lignes qui ont été ajoutées dans la pull request. Le taux de couverture sera calculé en divisant le nombre de nouvelles lignes non couvertes par le nombre de nouvelles lignes.
Vous pouvez définir des seuils pour faire échouer les tests sur un outil CI. Ce package peut également imprimer les lignes qui n’ont pas été couvertes, ce qui facilite l’identification des tests manquants.
Installation
Ajoutez cette ligne au fichier pubspec.yaml de votre package sous le dev_dependencies
section:
dev_dependencies:
pull_request_coverage:
Vous devez spécifier la version pour éviter de casser les changements
Usage
Ce package utilise deux informations pour générer son rapport :
- UN
lcov.info
fichier, généré par leflutter test --coverage
commande - Un diff entre la branche courante et la branche principale, généré par le
git diff
commande
Génération du fichier lcov.info
Il y a un problème connu avec le flutter test --coverage
commande. Il peut ne pas signaler les fichiers non testés. Il existe une solution de contournement, décrite dans ce publier
Exécutez la commande suivante pour générer le coverage/lcov.info
dossier:
Exécution de pull_request_coverage
Pour vérifier le code du PR, ce paquet a besoin d’un diff entre sa branche et la cible du référentiel. Le diff est lu à partir du STDIN
saisir.
Vous pouvez alimenter le STDIN en utilisant bash |
opérateur, comme ceci :
git diff repository/main | flutter pub run pull_request_coverage
Exemple de sortie :
lib/screen/fantasy_button.dart is fully covered 🎉 (+10)
lib/screen/fantasy_list.dart has uncovered lines 👀 (+133)
58 : + );
59 : + }
60 : +
⬤ : + return Scrollbar(
⬤ : + child: AzListView(
⬤ : + data: fantasyItems,
64 : + indexBarAlignment: Alignment.centerLeft,
⬤ : + itemCount: fantasyItems.length,
66 : + indexBarHeight: double.infinity,
67 : + indexBarOptions: const IndexBarOptions(
68 : + hapticFeedback: true,
72 : + fontWeight: FontWeight.w500,
73 : + ),
74 : + ),
⬤ : + itemBuilder: _buildTile,
76 : + ),
77 : );
78 : }
After ignoring excluded files, this pull request has:
✪ 256 new lines, 5 of them are NOT covered by tests. But....it's enough to pass the test 😉
✪ 98.046875% of coverage. This is above the limit of 95.0%
Lignes définies avec un ⬤
symbole sont ceux découverts.
Exemple avec des seuils définis et n’affichant pas de lignes non couvertes :
git diff repository/main | flutter pub run pull_request_coverage --minimum-coverage 95 --maximum-uncovered-lines 5 --hide-uncovered-lines
Code de sortie
Code | La description |
---|---|
Tests passés. | |
1 | Les tests ont échoué (uniquement lorsque des seuils sont définis). |
255 | L’exécution a échoué et les tests n’ont pas été exécutés. |
Choix
Paramètre | défaut | obligatoire | la description |
---|---|---|---|
fichier lcov | couverture/lcov.info | non | chemin du fichier lcov |
exclure-suffixe | .g.dart,.pb.dart,.pbenum.dart,.pbserver.dart,.pbjson.dart | non | Exclure tous les chemins commençant par ces suffixes, séparés par des virgules |
exclure-préfixe | non | Exclure tous les chemins commençant par ces préfixes, séparés par des virgules | |
couverture-minimale | non | Faire échouer le test si le taux de couverture n’atteint pas cette valeur minimale | |
maximum de lignes non couvertes | non | Échec du test si le total des lignes non couvertes est inférieur à cette valeur |
Drapeaux | la description |
---|---|
masquer les lignes non couvertes | Ne pas imprimer le code source s’il n’est pas couvert par des tests |
GitHub
Voir Github