Testen in Laravel

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.

Geräte- und Funktionstests

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.

  • Erstellen Sie die GET-Anforderung, um auf die Anmeldeseite zuzugreifen.
  • Prüfen Sie, ob wir auf der Anmeldeseite sind.
  • Generieren Sie die POST-Anforderung, um Daten auf der Anmeldeseite zu veröffentlichen.
  • Prüfen Sie, ob die Sitzung erfolgreich erstellt wurde.

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.

Einrichten der Voraussetzungen

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 migrieren

Lassen 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 soweit Post 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 der Tests / Einheit Verzeichnis.

$ php Handwerker make: test AccessorTest --unit

Und 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 testen getNameAttribute Methode der Post 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ührt getNameAttribute Methode auch, um den Posttitel vorzubereiten. Zum Schluss verwenden wir die assertEquals 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 der Tests / Funktion Verzeichnis.

$ php Handwerker make: test AccessorTest

Es 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 dem assertSeeText 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.

$ phpunit

Das 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!