Heim > Backend-Entwicklung > PHP-Tutorial > Ich habe schließlich Pest für PHP und Laravel ausprobiert und dann den Wechsel vorgenommen

Ich habe schließlich Pest für PHP und Laravel ausprobiert und dann den Wechsel vorgenommen

Barbara Streisand
Freigeben: 2024-11-30 02:56:14
Original
426 Leute haben es durchsucht

Ich habe Mitte 2015 angefangen, reines PHP zu lernen. Dann habe ich mich mit CodeIgniter 3 und Laravel 5.1 vertraut gemacht. Im Laufe der Jahre ist Laravel mein bevorzugtes Framework und ich bleibe immer noch dabei. Wie bei anderen beliebten PHP-Projekten halte ich PHPUnit für die einzige Wahl für Unit-Tests. Doch 2021 gab es eine kleine Veränderung, als Pest kam. Es wurde von Nuno Maduro erstellt – einem Ingenieur bei Laravel, der auch viele tolle Projekte/Pakete erstellt, die in der PHP- und Laravel-Community weit verbreitet sind.

Seit dem allerersten Tag von Pest habe ich mich nicht darum gekümmert, weil PHPUnit für mich ausreicht und ich mich faul fühle, dieses neue Testtool zu erlernen. Aber je mehr die Laravel-Community wächst, desto mehr Pest wird empfohlen. Viele Laravel-Projekte/-Pakete von Spatie, Livewire, Filament usw. verwenden Pest. Das Problem besteht also darin, dass ich beim Testen damit zusammenhängender Dinge auf PHPUnit portieren muss. Ich scheine keine Wahl zu haben. Es ist Zeit für mich, einen Blick auf Pest zu werfen.

Der erste Blick

Nach dem Installationsabschnitt erstelle ich mein erstes PHP-Projekt mit Pest.

mkdir ~/Herd/lerning-pest

cd ~/Herd/learning-pest

composer require pestphp/pest --dev --with-all-dependencies

./vendor/bin/pest --init 
Nach dem Login kopieren

Die Verzeichnisstruktur ist fast die gleiche wie bei PHPUnit. Der Unterschied besteht darin, wie ein Test aussieht. Es ist abschlussbasiert statt klassenbasiert.

<?php

// tests/Unit/ExampleTest.php

test('example', function () {
    expect(true)->toBeTrue();
});
Nach dem Login kopieren

Ich kenne die Verwendung von Closure, mit der Methoden zur Laufzeit träge an ein Objekt angehängt werden können. Dies kann also in PHPUnit so umgeschrieben werden.

<?php

// tests/Unit/ExampleTest.php

class ExampleTest extends \PHPUnit\Framework\TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}
Nach dem Login kopieren

Es heißt, die Pest-Assertionssyntax sei von Rubys Rspec und Jest inspiriert, was ich nicht kenne. Daher interessiere ich mich auch nicht so sehr für sie. Für mich spielt es keine Rolle, wie die Assertionssyntax ist.

Mir gefällt einfach das Ergebnis, das beim Ausführen von Tests angezeigt wird. Es ist meiner Meinung nach viel hübscher und sauberer als PHPUnit.

I finally tried Pest for PHP & Laravel, then made the switch

Behauptungen

Dies sind Behauptungen, die ich in PHPUnit am häufigsten verwendet habe.

$this->assertSame($expected, $actual);
$this->assertTrue($condition);
$this->assertFalse($condition);
$this->assertNull($actual);
$this->assertEmpty($array);
$this->assertCount($count, $countable);
$this->assertInstanceof($type, $instance);
Nach dem Login kopieren

Sie können leicht in Pest umgeschrieben werden.

expect($actual)->toBe($expected);
expect($condition)->toBeTrue();
expect($condition)->toBeFalse();
expect($actual)->toBeNull();
expect($actual)->toBeEmpty();
expect($actual)->toBeInstanceOf($type);
Nach dem Login kopieren

Wie ich bereits erwähnt habe, ist die Pest-Assertionssyntax in Ordnung, aber ich bleibe derzeit bei PHPUnit, weil ich keine neuen APIs studieren muss. Wie auch immer, ich bevorzuge PHPUnit-Behauptungen und verwende nur Dinge, die in Pest einzigartig sind. Architekturtests sind ein Beispiel. Meine Testdatei sieht so aus.

<?php

test("all PHP files in LearningPest namespace must have strict mode enabled", function () {
    arch()
        ->expect('LearningPest')
        ->toUseStrictTypes();
});

test('all PHPUnit assertions are available for Pest', function () {
    $instance = new \stdClass();

    $getInstance = function () use ($instance) {
        return $instance;
    };

    $this->assertSame($instance, $getInstance());

    $this->assertInstanceOf(stdClass::class, $instance);

    $this->assertTrue(1 < 2);
    $this->assertFalse(1 > 2);

    $value = null;

    $this->assertNull($value);

    $this->assertEmpty([]);

    $array = [1, 2, 3];

    $this->assertCount(3, $array);
});
Nach dem Login kopieren

Pflichtfunktionen

Es gibt eine Reihe obligatorischer Funktionen, die es mir ermöglichen, in Pest identisch mit PHPUnit zu arbeiten. Hier sind sie:

  • PHPUnit verfügt über einen Datenanbieter. Pest hat Datensätze.
  • PHPUnit verfügt über setUp, TearDown, SetUpBeforeClass und TearDownAfterClass. Pest hat beforeEach, afterEach, beforeAll und afterAll.
  • Beide verfügen über Ausnahmeprüfungen und können Tests überspringen/gruppieren/filtern.

Mockery ist eine eigenständige Bibliothek, daher liste ich sie hier nicht auf.

Auf der anderen Seite verfügt Pest über viele nützliche Dinge wie Architektur, Snapshot- oder Stresstests und Plugins. Ich werde sie entdecken, wenn ich Tests schreibe.

Abschluss

  • Pest basiert auf PHPUnit, das in der PHP- und Laravel-Community in letzter Zeit weit verbreitet und empfohlen wird.
  • Mit Pest kann ich fast auf die gleiche Weise wie zuvor arbeiten, aber mit schönerer CLI und hilfreicheren Funktionen.
  • Pest ist jetzt das Standard-Testframework für meine PHP- und Laravel-Anwendungen.

Wenn Sie ein PHP-Entwickler sind, der Pest noch nicht verwendet hat, probieren Sie es aus.

Das obige ist der detaillierte Inhalt vonIch habe schließlich Pest für PHP und Laravel ausprobiert und dann den Wechsel vorgenommen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage