Heim > Artikel > Backend-Entwicklung > Testen Sie Ihr DOM in Laravel mit PHPUnit
PHPUnit verfügt standardmäßig über Funktionen wie AssertSee und AssertSeeText. In beiden Fällen können wir gegen einen bestimmten Text behaupten. Um HTML-Tags zu behaupten, werden wir uns mit einigen benutzerdefinierten Funktionen auf diese Funktionen verlassen Arbeiten Sie daran, diese noch ein wenig zu polieren.
Ich muss testen, ob einige Formulare ein CSRF-Token generieren.
Die CSRF-Token-Anweisung von Laravel generiert eine Eingabe wie diese:
<input type="hidden" name="_token" value="random_generated_token" ...>
Da sich das generierte Token zwischen Anfragen ändert, werden wir den generierten Token-Wert nicht testen, sondern bestätigen, dass die Eingabe mit einigen der erforderlichen Attribute vorhanden ist. PHPUnit „assetSee“ verfügt über einen zweiten Parameter, um einen Wert zu maskieren, damit wir dies können Mach so etwas:
$this ->get("contact-us") ->assertSee([ '<input name="some_database_column"' ], false);
Es würde unsere Lösung lösen, aber wahrscheinlich gibt es eine bessere Möglichkeit, dies für mehr Fälle zu verwenden, also würde das Schreiben meines gewünschten Codes mit einem „Wunschdenken“-Ansatz etwa so aussehen:
$this->get("contact-us") ->assertHtml('input', [ "type" => "hidden", "name" => "_token", ])
Dies wäre nützlich, da es eine Behauptung hinzufügt, die in mehreren Fällen funktionieren würde, indem nur der Tag-Name und ein Array von Attributen übergeben werden
Wir können so etwas in Laravel hinzufügen, indem wir ein benutzerdefiniertes Makro zur TestResponse-Klasse im AppServiceProvider oder einem anderen benutzerdefinierten Anbieter hinzufügen:
TestResponse::macro('assertHtml', function ($tag, $attributes) { $attributes = collect($attributes) ->map(function ($attributeValue, $attributeKey) { return "$attributeKey=\"$attributeValue\" "; }) ->values() ->implode("", ""); $htmlElement = "<$tag $attributes"; $this->assertSee([$htmlElement], false); });
Jetzt können wir unser DOM testen, indem wir das Vorhandensein eines Tags und eines Attributs testen.
In diesem Fall können wir noch einen Schritt weitergehen. Ich müsste ein Formular als CSRF-Token in mehreren Formularen in der App bestätigen, damit wir uns darauf verlassen können, dass unser Makro weitere Behauptungen erstellt, in diesem Fall wie erwartet HTML-Tag und -Attribute würden sich nicht ändern. Ich kann so etwas hinzufügen:
TestResponse::macro('assertCSRFTokenExists', function () { $this->assertHtml('input', [ "type" => "hidden", "name" => "_token", ]); });
Diese Aussage ist kurz, wiederverwendbar, leicht zu lesen und zu verwenden:
$this->get("contact-us")->assertCSRFTokenExists();
Für aussagekräftigere Aussagen sollten Sie ein hervorragendes Paket in Betracht ziehen wie:
sinnbeck/laravel-dom-assertions
Hoffentlich hilft dies dabei, grundlegende DOM-Behauptungen in Ihre Tests einzufügen
Das obige ist der detaillierte Inhalt vonTesten Sie Ihr DOM in Laravel mit PHPUnit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!