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..
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..
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..
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 migrateAussi, 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 lePoster
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 letests / Unité
annuaire.$ php fabrication artisanale: test AccessorTest --unitEt 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 lagetNameAttribute
méthode duPoster
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 legetNameAttribute
méthode aussi bien pour préparer le titre de poste. Enfin, nous utilisons leassertEquals
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 letests / 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 laassertSeeText
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.
$ phpunitCela 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!