En tant que développeur avec une expérience JavaScript, j'ai passé pas mal de temps à écrire des tests avec Jest. Dans mon projet, gimme_readme, j'ai dû jouer avec certaines fonctionnalités expérimentales avec Node et Jest à cause des modules npm tiers que j'utilisais. J'ai pu trouver d'excellents threads Stack Overflow qui m'ont appris à exécuter des tests Jest lors de l'utilisation de la syntaxe ES6. Sans la sagesse de ces individus intelligents, disons simplement que j’aurais eu du mal ! Cependant, armé de cette connaissance de l'utilisation des fonctionnalités expérimentales de Jest, j'ai pu :
Le code du pipeline CI que j'ai décrit ci-dessus peut être trouvé ici et est configuré pour s'exécuter chaque fois qu'un push est effectué vers une branche ou lorsqu'il y a une pull request. De cette façon, tous ceux qui essaient de contribuer à mon référentiel sauront si le code qu'ils ont contribué est "assez bon pour être utilisé" en ce qui concerne sa fusion dans ma branche principale - du moins en ce qui concerne les tests automatisés.
Quoi qu'il en soit, cela suffit à propos du travail que j'ai effectué pour mon référentiel il y a bien longtemps.
Cette semaine, j'ai décidé de relever le défi d'écrire quelques tests pour un projet Python écrit par mon ami Aryan Khurana. Le projet d'Aryan est un outil en ligne de commande appelé github-echo qui fournit des informations sur un référentiel GitHub. Utiliser un langage inconnu, un framework de test que je n'avais jamais utilisé (PyTest) était définitivement en dehors de ma zone de confort, mais j'ai vraiment apprécié qu'Aryan soit prêt à me montrer les ficelles du métier (merci Aryan !).
Lorsque j'ai commencé à travailler sur des tests pour le référentiel d'Aryan, j'ai été immédiatement submergé par la différence entre les tests. Alors que Jest était devenu un territoire familier pour moi, le pytest de Python me semblait très étranger. Néanmoins, avec les conseils d'Aryan et une certaine détermination, j'ai commencé à comprendre ses caractéristiques uniques.
Décomposons ce que j'ai découvert dans leurs cas de test :
Tests paramétrés : L'une des premières choses qui a attiré mon attention a été le décorateur @pytest.mark.parametrize. Ceci est similaire au test.each de Jest, mais avec une syntaxe plus propre :
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
Gestionnaires de contexte : Au lieu de expect().toThrow() de Jest, Python utilise des gestionnaires de contexte avec pytest.raises :
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
Système de fichiers temporaire : les tests utilisent le dispositif tmp_path de pytest pour les opérations du système de fichiers, ce qui est beaucoup plus propre que la configuration de systèmes de fichiers fictifs dans Jest :
with pytest.raises(typer.BadParameter, match='Invalid GitHub repository URL'): check_cli_arguments(invalid_url, 'gemini', 0.5, Path('output.md'))
Cette expérience de travail avec les frameworks de test JavaScript et Python a élargi ma perspective sur les tests logiciels. Alors que Jest me semblait être mon territoire d'origine, j'en suis venu à apprécier les fonctionnalités puissantes de pytest telles que les tests paramétrés et les appareils. Que vous écriviez des tests JavaScript ou Python, l'objectif final reste le même : fournir un code fiable et bien testé à vos utilisateurs.
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!