Essais à Laravel

Quelle que soit l'application à laquelle vous traitez, les tests constituent un aspect important et souvent négligé que vous devez accorder à l'attention qu'il mérite. Aujourd'hui, nous allons en discuter dans le contexte du framework Web Laravel..

En fait, Laravel supporte déjà le framework de test PHPUnit dans le noyau même. PHPUnit est l'un des frameworks de test les plus populaires et les plus largement acceptés de la communauté PHP. Il vous permet de créer les deux types de tests-unitaires et fonctionnels.

Nous allons commencer par une introduction aux tests unitaires et fonctionnels. Au fur et à mesure, nous explorerons comment créer des tests unitaires et fonctionnels à Laravel. Je suppose que vous connaissez les bases du framework PHPUnit, car nous allons l'explorer dans le contexte de Laravel dans cet article..

Tests unitaires et fonctionnels

Si vous connaissez déjà le framework PHPUnit, sachez que vous pouvez diviser les tests en deux types de tests unitaires et de tests fonctionnels..

Dans les tests unitaires, vous testez l'exactitude d'une fonction ou d'une méthode donnée. Plus important encore, vous testez un seul élément de la logique de votre code à un moment donné.

Dans votre développement, si vous constatez que la méthode que vous avez implémentée contient plusieurs unités logiques, il est préférable de la diviser en plusieurs méthodes afin que chaque méthode contienne un seul élément de code logique et testable..

Jetons un coup d'œil à un exemple qui constitue un cas idéal pour les tests unitaires.

fonction publique getNameAttribute ($ value) return ucfirst ($ value); 

Comme vous pouvez le constater, la méthode ne fait qu'une et une seule chose. Il utilise le ucfirst fonction pour convertir un titre en titre commençant par une majuscule.

Alors que le test unitaire sert à tester l'exactitude d'une seule unité logique de code, le test fonctionnel permet quant à lui de tester l'exactitude d'un cas d'utilisation spécifique. Plus spécifiquement, il vous permet de simuler des actions qu'un utilisateur effectue dans une application afin d'exécuter un cas d'utilisation spécifique..

Par exemple, vous pouvez implémenter un scénario de test fonctionnel pour certaines fonctionnalités de connexion pouvant impliquer les étapes suivantes..

  • Créez la demande GET pour accéder à la page de connexion.
  • Vérifiez si nous sommes sur la page de connexion.
  • Générez la demande POST pour poster des données sur la page de connexion.
  • Vérifier si la session a été créée avec succès.

C'est ainsi que vous êtes censé créer le scénario de test fonctionnel. À partir de la section suivante, nous allons créer des exemples qui montrent comment créer des scénarios de test unitaires et fonctionnels dans Laravel..

Configuration des prérequis

Avant de créer des tests réels, nous devons définir quelques éléments qui seront utilisés dans nos tests..

Nous allons créer le modèle Post et la migration associée pour commencer. Allez-y et exécutez la commande artisan suivante pour créer le Poster modèle.

$ php marque artisanale: modèle Post - migration

La commande ci-dessus devrait créer le Poster classe de modèle et une migration de base de données associée, ainsi.

le Poster la classe modèle doit ressembler à:

Et le fichier de migration de base de données doit être créé à base de données / migrations / YYYY_MM_DD_HHMMSS_create_posts_table.php.

Nous voulons également stocker le titre de l'article. Révisons le code de la Poster fichier de migration de base de données pour ressembler à ce qui suit.

incréments ('id'); $ table-> chaîne ('nom'); $ table-> horodatages (); );  / ** * Inverser les migrations. * * @return void * / public function down () Schema :: dropIfExists ('posts'); 

Comme vous pouvez le voir, nous avons ajouté le $ table-> chaîne ('nom') colonne pour stocker le titre de la publication. Ensuite, il vous suffit d’exécuter la commande migrate pour créer cette table dans la base de données..

$ php artisan migrate

Aussi, remplaçons le Poster modèle avec le contenu suivant.

Nous venons d'ajouter le accesseur méthode, qui modifie le titre du message, et c’est exactement ce que nous allons tester dans notre scénario de test unitaire. C'est tout ce que le Poster le modèle est concerné.

Ensuite, nous allons créer un fichier de contrôleur à app / Http / Controllers / AccessorController.php. Cela nous sera utile lors de la création ultérieure du scénario de test fonctionnel..

get ("id", 0); // charge le message demandé $ post = Post :: find ($ post_id); // vérifie le nom de la propriété return $ post-> name; 

dans le indice méthode, nous récupérons l'ID de publication à partir des paramètres de la requête et essayons de charger l'objet de modèle de publication.

Ajoutons également un itinéraire associé dans le routes / web.php fichier.

Route :: get ('accessor / index', 'AccessorController @ index');

Et avec cela en place, vous pouvez exécuter l'URL http://votre-laravel-site.com/accessor/index pour voir si cela fonctionne comme prévu.

Tests unitaires

Dans la section précédente, nous avons effectué la configuration initiale qui nous sera utile dans cette section et dans les sections suivantes. Dans cette section, nous allons créer un exemple illustrant les concepts du test unitaire dans Laravel..

Comme toujours, Laravel fournit une commande artisanale vous permettant de créer la classe de modèle de base du scénario de test unitaire..

Exécutez la commande suivante pour créer le AccessorTest classe de cas de tests unitaires. Il est important de noter que nous passons le --unité mot-clé qui crée le cas de test unitaire, et il sera placé sous le tests / Unité annuaire.

$ php fabrication artisanale: test AccessorTest --unit

Et cela devrait créer la classe suivante à tests / Unit / AccessorTest.php.

assertTrue (true); 

Remplaçons-le par un code significatif.

prénom); // charge le post avec Eloquent $ model_post = Post :: find (1); $ model_post_title = $ model_post-> name; $ this-> assertEquals ($ db_post_title, $ model_post_title); 

Comme vous pouvez le constater, le code est exactement le même qu’il aurait été dans le noyau PHP. Nous venons d'importer des dépendances spécifiques à Laravel qui nous permettent d'utiliser les API requises. dans le testAccessorTest méthode, nous sommes censés tester l'exactitude de la getNameAttribute méthode du Poster modèle.

Pour ce faire, nous avons récupéré un exemple de publication dans la base de données et préparé le résultat attendu dans le $ db_post_title variable. Ensuite, nous chargeons le même message en utilisant le modèle Eloquent qui exécute le getNameAttribute méthode aussi bien pour préparer le titre de poste. Enfin, nous utilisons le assertEquals méthode pour comparer les deux variables comme d'habitude.

Voilà comment préparer des cas de tests unitaires à Laravel..

Test fonctionel

Dans cette section, nous allons créer le scénario de test fonctionnel qui teste la fonctionnalité du contrôleur que nous avons créé précédemment..

Exécutez la commande suivante pour créer le AccessorTest classe de cas de test fonctionnel. Comme nous n'utilisons pas le --unité mot-clé, ça va être traité comme un cas de test fonctionnel et placé sous le tests / Caractéristique annuaire.

$ php fabrication artisanale: test AccessorTest

Ça va créer la classe suivante à tests / Feature / AccessorTest.php.

assertTrue (true); 

Remplaçons-le par le code suivant.

prénom); $ response = $ this-> get ('/ accessor / index? id = 1'); $ response-> assertStatus (200); $ response-> assertSeeText ($ db_post_title); 

Encore une fois, le code devrait sembler familier à ceux qui ont déjà une expérience dans les tests fonctionnels.

Tout d’abord, nous cherchons un exemple de publication dans la base de données et préparons le résultat attendu dans le $ db_post_title variable. Ensuite, nous essayons de simuler le / accesseur / index? id = 1 Demande GET et saisissez la réponse de cette demande dans le $ réponse variable.

Ensuite, nous avons essayé de faire correspondre le code de réponse dans le $ réponse variable avec le code de réponse attendu. Dans notre cas, il devrait être 200 car nous devrions obtenir une réponse valide à notre demande GET. De plus, la réponse doit contenir un titre qui commence par une majuscule, et c’est exactement ce que nous essayons de faire correspondre à l'aide de la assertSeeText méthode.

Et c'est un exemple de cas de test fonctionnel. Maintenant, nous avons tout ce contre quoi nous pourrions faire nos tests. Continuons et exécutons la commande suivante à la racine de votre application pour exécuter tous les tests.

$ phpunit

Cela devrait exécuter tous les tests de votre application. Vous devriez voir une sortie standard PHPUnit qui affiche le statut des tests et des assertions dans votre application..

Et avec ça, nous sommes à la fin de cet article.

Conclusion

Aujourd'hui, nous avons exploré les détails des tests à Laravel, qui prennent déjà en charge PHPUnit en son cœur. L'article commençait par une introduction de base aux tests unitaires et fonctionnels, et nous avons ensuite exploré les spécificités des tests dans le contexte de Laravel..

Au cours de ce processus, nous avons créé une poignée d’exemples illustrant la création de scénarios de test unitaires et fonctionnels à l’aide de la commande artisan..

Si vous commencez tout juste à vous familiariser avec Laravel ou souhaitez étendre vos connaissances, votre site ou vos applications avec des extensions, nous pouvons étudier le marché à plusieurs niveaux sur le marché Envato..

N'hésitez pas à exprimer vos pensées en utilisant le flux ci-dessous!