Uji DOM Anda dalam Laravel dengan PHPUnit

王林
Lepaskan: 2024-07-22 09:06:42
asal
583 orang telah melayarinya

Test Your DOM in Laravel with PHPUnit

PHPUnit keluar dari kotak dengan ciri seperti AssertSee dan AssertSeeText dalam kedua-dua kes yang kami boleh tegaskan terhadap teks tertentu, untuk menegaskan teg HTML kami akan bergantung pada ciri ini dengan beberapa tersuai berusaha untuk menggilap ini sedikit lagi.

Kes penggunaan

Saya perlu menguji bahawa sesetengah borang menjana token CSRF.

Penyelesaian Asas

Arahan token Laravel CSRF menjana input seperti ini:

<input type="hidden" name="_token" value="random_generated_token" ...>
Salin selepas log masuk

Memandangkan token yang dijana berubah antara permintaan, kami tidak akan menguji nilai token yang dijana, sebaliknya kami akan menegaskan bahawa input wujud dengan beberapa atribut yang diperlukan, PHPUnit assertSee mempunyai param kedua untuk melepaskan nilai supaya kami boleh lakukan sesuatu seperti ini:

$this
    ->get("contact-us")
    ->assertSee([
        '<input name="some_database_column"'
    ], false);
Salin selepas log masuk

Memperbaiki lelaran

Ia akan menyelesaikan penyelesaian kami, tetapi mungkin terdapat cara yang lebih baik untuk menggunakan ini untuk lebih banyak kes, jadi menulis menggunakan pendekatan "berfikiran angan-angan" kod yang saya inginkan adalah seperti ini:

$this->get("contact-us")
    ->assertHtml('input', [
        "type" => "hidden",
        "name" => "_token",
])
Salin selepas log masuk

Ini berguna kerana ia menambahkan penegasan yang akan berfungsi dalam berbilang kes dengan hanya menghantar nama teg dan pelbagai atribut

Kami boleh menambah sesuatu seperti ini dalam Laravel dengan menambahkan makro tersuai pada kelas TestResponse dalam AppServiceProvider atau mana-mana Penyedia tersuai lain:

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);
});
Salin selepas log masuk

Kini kami boleh menguji DOM kami dengan menguji kehadiran teg dan atribut.

Mensasarkan Cara Laravelish

Kita boleh pergi sedikit ke hadapan dalam kes ini, saya perlu menegaskan bahawa borang sebagai token CSRF dalam berbilang bentuk dalam apl, jadi kita boleh bergantung pada makro kita untuk membuat lebih banyak penegasan, dalam kes ini seperti yang dijangkakan Teg HTML dan atribut tidak akan berubah Saya boleh menambah sesuatu seperti ini:

TestResponse::macro('assertCSRFTokenExists', function () {
    $this->assertHtml('input', [
        "type" => "hidden",
        "name" => "_token",
    ]);
});
Salin selepas log masuk

Pernyataan ini pendek, boleh diguna semula, mudah dibaca dan digunakan:

$this->get("contact-us")->assertCSRFTokenExists();
Salin selepas log masuk

Untuk penegasan yang lebih kuat, anda harus mempertimbangkan pakej yang sangat baik seperti:

sinnbeck/laravel-dom-assertions

Mudah-mudahan, ini membantu menambah penegasan DOM asas dalam ujian anda

Atas ialah kandungan terperinci Uji DOM Anda dalam Laravel dengan PHPUnit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan