Unabhängig von der Anwendung, mit der Sie es zu tun haben, ist das Testen ein wichtiger und oft übersehener Aspekt, den Sie der Aufmerksamkeit widmen sollten, die sie verdient. Heute werden wir dies im Kontext des Laravel-Web-Frameworks diskutieren.
Tatsächlich unterstützt Laravel das PHPUnit-Testframework bereits im Kern. PHPUnit ist eines der beliebtesten und allgemein akzeptierten Testframeworks in der PHP-Community. Sie können beide Arten von Tests erstellen und sowohl funktional als auch funktional erstellen.
Wir beginnen mit einer grundlegenden Einführung in die Geräte- und Funktionstests. Im weiteren Verlauf untersuchen wir, wie Sie Unit- und Funktionstests in Laravel erstellen. Ich gehe davon aus, dass Sie mit den Grundlagen des PHPUnit-Frameworks vertraut sind, da wir es in diesem Artikel im Kontext von Laravel untersuchen werden.
Wenn Sie bereits mit dem PHPUnit-Framework vertraut sind, sollten Sie wissen, dass Sie Tests in zwei Flavour-Unit-Tests und Funktionstests unterteilen können.
In Komponententests testen Sie die Richtigkeit einer bestimmten Funktion oder einer Methode. Noch wichtiger ist, Sie testen zu einem bestimmten Zeitpunkt einen einzelnen Teil der Logik Ihres Codes.
Wenn Sie in Ihrer Entwicklung feststellen, dass die von Ihnen implementierte Methode mehr als eine logische Einheit enthält, sollten Sie diese besser in mehrere Methoden aufteilen, sodass jede Methode einen einzigen logischen und überprüfbaren Code enthält.
Werfen wir einen kurzen Blick auf ein Beispiel, das ideal für Unit-Tests ist.
öffentliche Funktion getNameAttribute ($ value) return ucfirst ($ value);
Wie Sie sehen, macht die Methode nur eine Sache. Es verwendet die ucfirst
Funktion zum Konvertieren eines Titels in einen Titel, der mit Großbuchstaben beginnt.
Während der Komponententest verwendet wird, um die Richtigkeit einer einzelnen logischen Codeeinheit zu testen, können Sie mit dem Funktionstest die Korrektheit eines bestimmten Anwendungsfalls prüfen. Insbesondere können Sie damit Aktionen simulieren, die ein Benutzer in einer Anwendung ausführt, um einen bestimmten Anwendungsfall auszuführen.
Sie könnten beispielsweise einen funktionalen Testfall für einige Anmeldefunktionen implementieren, die die folgenden Schritte beinhalten können.
So sollten Sie den funktionalen Testfall erstellen. Ab dem nächsten Abschnitt erstellen wir Beispiele, die zeigen, wie in Laravel Unit- und Funktionstestfälle erstellt werden.
Bevor wir die eigentlichen Tests erstellen, müssen wir einige Dinge einrichten, die in unseren Tests verwendet werden.
Wir werden zunächst das Post-Modell und die zugehörige Migration erstellen. Fahren Sie fort und führen Sie den folgenden Handwerkerbefehl aus, um den Post
Modell-.
$ php Handwerker machen: Modell Post - Migration
Der obige Befehl sollte das erstellen Post
Modellklasse und eine zugehörige Datenbankmigration ebenfalls.
Das Post
Die Modellklasse sollte folgendermaßen aussehen:
Die Datenbankmigrationsdatei sollte unter erstellt werden
Datenbank / Migrationen / YYYY_MM_DD_HHMMSS_create_posts_table.php
.Wir möchten auch den Titel des Beitrags speichern. Lassen Sie uns den Code von überarbeiten
Post
Datenbankmigrationsdatei sollte wie folgt aussehen.Inkremente ('id'); $ table-> string ('name'); $ table-> timestamps (); ); / ** * Kehren Sie die Migrationen um. * * @return void * / public function down () Schema :: dropIfExists ('posts');Wie Sie sehen können, haben wir das hinzugefügt
$ table-> string ('name')
Spalte, um den Titel des Beitrags zu speichern. Als Nächstes müssen Sie nur den Migrationsbefehl ausführen, um diese Tabelle tatsächlich in der Datenbank zu erstellen.$ php Handwerker migrierenLassen Sie uns auch das ersetzen
Post
Modell mit folgenden Inhalten.Wir haben gerade das hinzugefügt
Accessor
Diese Methode ändert den Titel des Beitrags. Genau das testen wir in unserem Unit-Testfall. Das ist es soweitPost
Modell ist betroffen.Als Nächstes erstellen wir eine Controller-Datei unter
app / HTTP / Controller / AccessorController.php
. Es ist für uns nützlich, wenn wir den funktionalen Testfall zu einem späteren Zeitpunkt erstellen.get ("id", 0); // Lade den angeforderten Beitrag $ post = Post :: find ($ post_id); // überprüfe die name-Eigenschaft return $ post-> name;In dem
Index
Als Methode rufen wir die Post-ID aus den Anforderungsparametern ab und versuchen, das Post-Model-Objekt zu laden.Fügen wir auch eine verknüpfte Route in der hinzu
routen / web.php
Datei.Route :: get ('Accessor / Index', 'AccessorController @ Index');Damit können Sie die URL http://your-laravel-site.com/accessor/index ausführen, um zu sehen, ob sie wie erwartet funktioniert.
Unit Testing
Im vorherigen Abschnitt haben wir die ersten Einstellungen vorgenommen, die in diesem und in den kommenden Abschnitten für uns nützlich sein werden. In diesem Abschnitt werden wir ein Beispiel erstellen, das die Konzepte des Komponententests in Laravel veranschaulicht.
Wie immer bietet Laravel einen handwerklichen Befehl, mit dem Sie die Basisvorlagenklasse des Komponententests erstellen können.
Führen Sie den folgenden Befehl aus, um das zu erstellen
AccessorTest
Unit Test Case-Klasse. Es ist wichtig anzumerken, dass wir das übergeben--Einheit
Schlüsselwort, das den Einheitentestfall erstellt, und es wird unter derTests / Einheit
Verzeichnis.$ php Handwerker make: test AccessorTest --unitUnd das sollte die folgende Klasse bei erstellen
Tests / Einheit / AccessorTest.php
.assertTrue (wahr);Ersetzen wir es durch einen sinnvollen Code.
Name); // Lade Beitrag mit Eloquent $ model_post = Post :: find (1); $ model_post_title = $ model_post-> name; $ this-> assertEquals ($ db_post_title, $ model_post_title);Wie Sie sehen, ist der Code genau derselbe wie in Core-PHP. Wir haben gerade Laravel-spezifische Abhängigkeiten importiert, mit denen wir die erforderlichen APIs verwenden können. In dem
testAccessorTest
Methode, sollen wir die Richtigkeit der testengetNameAttribute
Methode derPost
Modell-.Dazu haben wir ein Beispielpost aus der Datenbank abgerufen und die erwartete Ausgabe in der Datenbank vorbereitet
$ db_post_title
Variable. Als Nächstes laden wir den gleichen Beitrag mit dem Eloquent-Modell, das die ausführtgetNameAttribute
Methode auch, um den Posttitel vorzubereiten. Zum Schluss verwenden wir dieassertEquals
Methode, um beide Variablen wie gewohnt zu vergleichen.So bereiten Sie Unit-Testfälle in Laravel vor.
Funktionsprüfung
In diesem Abschnitt erstellen wir den funktionalen Testfall, der die Funktionalität des zuvor erstellten Controllers testet.
Führen Sie den folgenden Befehl aus, um das zu erstellen
AccessorTest
funktionale Testfallklasse. Da wir das nicht benutzen--Einheit
Stichwort wird es als funktionaler Testfall behandelt und unter derTests / Funktion
Verzeichnis.$ php Handwerker make: test AccessorTestEs wird die folgende Klasse um erstellt
tests / Feature / AccessorTest.php
.assertTrue (wahr);Ersetzen wir es durch den folgenden Code.
Name); $ response = $ this-> get ('/ accessor / index? id = 1'); $ response-> assertStatus (200); $ response-> assertSeeText ($ db_post_title);Der Code sollte auch denjenigen bekannt vorkommen, die bereits Erfahrung mit Funktionstests haben.
Erstens holen wir ein Beispielpost aus der Datenbank und bereiten die erwartete Ausgabe in der Datenbank vor
$ db_post_title
Variable. Anschließend versuchen wir das zu simulieren/ accessor / index? id = 1
GET request und packen Sie die Antwort dieser Anfrage im$ Antwort
Variable.Als Nächstes haben wir versucht, den Antwortcode in der
$ Antwort
Variable mit dem erwarteten Antwortcode. In unserem Fall sollten es 200 sein, da wir eine gültige Antwort für unsere GET-Anfrage erhalten sollten. Außerdem sollte die Antwort einen Titel enthalten, der mit Großbuchstaben beginnt, und genau das versuchen wir mit demassertSeeText
Methode.Und das ist ein Beispiel für den funktionalen Testfall. Jetzt haben wir alles, was wir testen könnten. Führen Sie den folgenden Befehl im Stammverzeichnis Ihrer Anwendung aus, um alle Tests auszuführen.
$ phpunitDas sollte alle Tests in Ihrer Anwendung ausführen. Sie sollten eine Standardausgabe von PHPUnit sehen, die den Status von Tests und Assertions in Ihrer Anwendung anzeigt.
Damit sind wir am Ende dieses Artikels.
Fazit
Heute haben wir die Details des Testens in Laravel untersucht, das PHPUnit bereits im Kern unterstützt. Der Artikel begann mit einer grundlegenden Einführung in Unit- und Funktionstests. Als wir weiter gingen, untersuchten wir die Besonderheiten des Testens im Kontext von Laravel.
Dabei haben wir eine Handvoll Beispiele erstellt, in denen gezeigt wurde, wie Sie mithilfe des Befehls handwerkliche Einheiten- und Funktionstestfälle erstellen können.
Wenn Sie gerade erst mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Reihe von Möglichkeiten, die Sie in Envato Market lernen können.
Zögern Sie nicht, Ihre Gedanken mit dem untenstehenden Feed auszudrücken!