Pada tanggal 20 Maret 2023, kami dengan bangga memperkenalkan Pest 2.0, menandainya sebagai rilis kami yang paling signifikan hingga saat ini, dengan lebih dari 7 juta unduhan pada saat penulisan. Versi ini memamerkan plugin arsitektur yang luar biasa, peningkatan kecepatan 80% dalam pengujian paralel, opsi pembuatan profil, dan banyak fitur lainnya.
Saat kami mendekati musim panas, kami sangat senang mengumumkan rilis kami yang akan datang: rilis "Spicy Summer" yang sangat dinantikan. Rilis ini menghadirkan serangkaian fitur menarik yang akan membuatnya terasa seperti versi utama tanpa benar-benar menjadi versi utama - ini adalah Pest v2.9.0 - jadi ini hanya berjarak "pembaruan komposer" dari Anda. Tanpa penundaan lebih lanjut, mari selami apa yang kami miliki untuk Anda musim panas ini:
Pengujian Snapshot Bawaan, untuk menguji keluaran panjang kode Anda dengan mudah
Jelaskan Blok, untuk mengelompokkan tes dan berbagi logika penyiapan dan teardown
Pengujian Arsitektur ++, pengujian arsitektur yang lebih kuat
Type Coverage Plugin, untuk mengukur persentase kode yang dicakup oleh deklarasi tipe
Plugin Drift, untuk mengonversi tes PHPUnit Anda secara otomatis ke Pest
Pengujian Snapshot Bawaan
Pengujian snapshot adalah teknik pengujian yang memungkinkan Anda untuk menegaskan bahwa output dari suatu fungsi atau metode tidak berubah. Ini cara yang bagus untuk menguji basis kode Anda dan memastikan bahwa kode Anda tidak berubah secara tiba-tiba.
Dan sekarang, kami dengan bangga mengumumkan bahwa Pest akan memiliki dukungan pengujian snapshot bawaan. Sebagai contoh, misalkan titik akhir "kontak" Anda menghasilkan HTML tertentu setiap kali dijalankan. Anda mungkin akan menulis tes seperti ini:
it('has a contact page', function () { $response = $this->get('/contact'); expect($response)->toMatchSnapshot();});
Pertama kali Anda menjalankan pengujian ini, ini akan membuat file snapshot - di test/.pest/snapshots - dengan konten respons. Lain kali Anda menjalankan tes, itu akan membandingkan respons dengan file snapshot. Jika responsnya berbeda, pengujian akan gagal. Jika jawabannya sama, tes akan lulus.
Selain itu, nilai ekspektasi yang diberikan tidak harus berupa respons; itu bisa apa saja. Misalnya, Anda dapat memotret array:
$array = /** Fetch array somewhere */; expect($array)->toMatchSnapshot();
Dan tentu saja, Anda dapat "membangun kembali" snapshot kapan saja dengan menggunakan opsi --update-snapshots :
./vendor/bin/pest --update-snapshots
Describe Blocks
Sejak kami merilis Pest, deskripsikan blok telah menjadi salah satu fitur yang paling banyak diminta. Ini adalah dasar untuk kerangka kerja pengujian "fungsional" apa pun, karena memungkinkan Anda untuk mengelompokkan pengujian dan berbagi logika penyiapan dan penghancuran.
beforeEach(fn () => $this->user = User::factory()->create()); describe('auth', function () { beforeEach(fn () => $this->actingAs($this->user)); test('cannot login when already logged in', function () { // ... }); test('can logout', function () { // ... });})->skip(/* Skip the entire describe block */); describe('guest', function () { test('can login', function () { // ... }); // ...});
Architectural Testing++
Pest selalu tentang membuat pengujian lebih menyenangkan. Rilis terakhir, kami memperkenalkan ekspektasi arsitektural, yang memungkinkan Anda menguji arsitektur basis kode Anda. Rilis ini, dengan bangga kami umumkan bahwa Pest meningkatkan ekspektasi arsitektural dengan menambahkan yang baru.
test('controllers') ->expect('App\Http\Controllers') ->toUseStrictTypes() ->toHaveSuffix('Controller') // or toHavePreffix, ... ->toBeReadonly() ->toBeClasses() // or toBeInterfaces, toBeTraits, ... ->classes->not->toBeFinal() // 🌶 ->classes->toExtendNothing() // or toExtend(Controller::class), ->classes->toImplementNothing() // or toImplement(ShouldQueue::class),
Type Coverage Plugin
Seperti yang mungkin Anda ketahui, Pest menawarkan flag --coverage yang memungkinkan Anda menghasilkan laporan cakupan yang bagus di terminal. Laporan ini menunjukkan baris kode mana yang dicakup oleh pengujian Anda. Ini adalah cara yang bagus untuk memastikan bahwa pengujian Anda mencakup semua kode Anda.
Selain itu, kami dengan bangga mengumumkan bahwa Pest sekarang akan memiliki dukungan cakupan tipe bawaan. Ini berarti Anda sekarang dapat melihat apakah kode sumber Anda menggunakan "types" di setiap tempat yang memungkinkan. Misalnya, Anda memiliki repositori yang memiliki metode berikut:
public function find($id){ return User::find($id);}
Metode ini tidak memiliki tipe parameter dan tipe pengembalian. Jadi, jika Anda menjalankan pest --type-coverage, Anda akan melihat output berikut dan mengetahui bahwa Anda perlu menambahkan tipe ke metode ini:
...app/Models\User.php .......................................... 100%app/Repositories/UserRepository.php .................. pa8, rt8 33%───────────────────────────────────────────────────────────────────Total: 91.6 % In addition, just like regular coverage, you may enforce --min type coverage percentage. For example, if you run --type-coverage --min=100, you will see the following output: ...app/Models\User.php .......................................................... 100%app/Repositories/UserRepository.php .................................. pa8, rt8 33%─────────────────────────────────────────────────────────────────────────────────── Total: 91.6 % ERROR Type coverage below expected: 91.6%. Minimum: 100.0%
Drift Plugin
Ya, Anda membacanya dengan benar. Kami dengan bangga mengumumkan bahwa Pest sekarang akan memiliki alat seperti pergeseran Laravel yang disebut Drift. Drift akan memungkinkan Anda untuk memutakhirkan tes PHPUnit Anda ke tes Pest dalam hitungan detik.
Jadi, jika Anda memiliki tes seperti ini:
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase{ public function test_that_true_is_true(): void { $this->assertTrue(true); }}
Kamu dapat menjalankan ./vendor/bin/pest --drift and Pest akan automatis mengkonversi ke PHPUnit test kamu ke Pest test:
test('true is true', function () { expect(true)->toBeTrue();});
Terima kasih sudah membaca tentang fitur baru Pest 2.9!
0 Komentar