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.
Saya perlu menguji bahawa sesetengah borang menjana token CSRF.
Arahan token Laravel CSRF menjana input seperti ini:
<input type="hidden" name="_token" value="random_generated_token" ...>
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);
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", ])
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); });
Kini kami boleh menguji DOM kami dengan menguji kehadiran teg dan atribut.
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", ]); });
Pernyataan ini pendek, boleh diguna semula, mudah dibaca dan digunakan:
$this->get("contact-us")->assertCSRFTokenExists();
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!