Rumah > pembangunan bahagian belakang > tutorial php > Panduan Komprehensif untuk Menguji dalam Laravel dengan PHPUnit

Panduan Komprehensif untuk Menguji dalam Laravel dengan PHPUnit

WBOY
Lepaskan: 2024-07-29 06:56:53
asal
784 orang telah melayarinya

Pengenalan kepada Pengujian dalam Laravel

Pengujian ialah aspek kritikal pembangunan perisian yang memastikan aplikasi anda berfungsi seperti yang dimaksudkan. Laravel menyediakan suite ujian yang teguh di luar kotak dengan PHPUnit, rangka kerja ujian popular untuk PHP. Panduan ini akan membimbing anda melalui penyediaan dan menjalankan ujian dalam Laravel, menerangkan perbezaan antara ujian unit dan ciri serta menyediakan contoh untuk pelbagai senario ujian.

Struktur Folder: Ujian Unit lwn. Ciri

Dalam Laravel, ujian biasanya disusun ke dalam dua direktori utama: Unit dan Ciri.

Ujian Unit: Ujian ini direka bentuk untuk menguji bahagian kecil dan terpencil aplikasi anda, seperti kaedah atau kelas individu. Mereka biasanya terletak dalam direktori ujian/Unit. Setiap fungsi ujian hendaklah bermula dengan ujian perkataan.

Contoh:

public function testExampleFunction() {
    $this->assertTrue(true);
}
Salin selepas log masuk

Ujian Ciri: Ujian ini mengendalikan interaksi yang lebih kompleks dan biasanya menguji beberapa komponen yang berfungsi bersama. Ia terletak dalam direktori ujian/Ciri. Ujian ciri selalunya melibatkan membuat permintaan HTTP dan menyemak respons.

Menjalankan Ujian dalam Laravel

Untuk menjalankan semua ujian dalam aplikasi Laravel anda, gunakan arahan berikut:

./vendor/bin/phpunit
Salin selepas log masuk
Salin selepas log masuk

Mengkonfigurasi Persekitaran Pengujian

Sebelum menjalankan ujian, adalah penting untuk mengkonfigurasi persekitaran ujian anda. Ubah suai fail phpunit.xml anda untuk menetapkan pembolehubah persekitaran untuk ujian. Contohnya, untuk menggunakan pangkalan data dalam memori SQLite untuk ujian yang lebih pantas:

<php>
    <env name="APP_ENV" value="testing"></env>
    <env name="APP_MAINTENANCE_DRIVER" value="file"></env>
    <env name="BCRYPT_ROUNDS" value="4"></env>
    <env name="CACHE_STORE" value="array"></env>
    <env name="DB_CONNECTION" value="sqlite"></env>
    <env name="DB_DATABASE" value=":memory:"></env>
    <env name="MAIL_MAILER" value="array"></env>
    <env name="PULSE_ENABLED" value="false"></env>
    <env name="QUEUE_CONNECTION" value="sync"></env>
    <env name="SESSION_DRIVER" value="array"></env>
    <env name="TELESCOPE_ENABLED" value="false"></env>
</php>
Salin selepas log masuk

Selepas mendayakan SQLite sebagai persekitaran ujian anda, kosongkan cache konfigurasi:

php artisan config:clear

Salin selepas log masuk

*Contoh: Menguji jika Laluan Profil Wujud dan Berfungsi Dengan Betul
*

Buat ujian untuk laluan profil:

php artisan make:test ProfileTest
Salin selepas log masuk

Tambah kaedah ujian untuk menyemak sama ada halaman profil memaparkan teks tertentu:

public function testProfilePage(){
    $response = $this->get('/profile');
    $response->assertSeeText('Your Profile');
}
Salin selepas log masuk

Menguji Interaksi Pangkalan Data

Menyediakan Pangkalan Data Pengujian

Sebelum menguji interaksi pangkalan data, buat konfigurasi pangkalan data ujian dalam config/database.php:

'mysqltesting' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => 'laravel_testing',
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],
Salin selepas log masuk

Menjalankan Ujian Pangkalan Data

Jalankan arahan PHPUnit untuk memastikan pangkalan data ujian dibuat dan berfungsi:

./vendor/bin/phpunit
Salin selepas log masuk
Salin selepas log masuk

Panduan Komprehensif untuk Menguji dalam Laravel dengan PHPUnit

Contoh: Menguji Pendaftaran Pengguna

Buat ujian untuk pendaftaran pengguna:

php artisan make:test UserTest

Salin selepas log masuk

Tambah kaedah ujian untuk mengesahkan pengguna boleh dibuat dan disimpan ke pangkalan data:

public function test_registration(): void
{
    $user = new User();
    $user->name = 'Test User';
    $user->email = 'email@example.com';
    $user->password = bcrypt('password');

    $user->save();

    $this->assertDatabaseHas('users', ['email' => 'email@example.com']);
}
Salin selepas log masuk

Menguji Tindakan Stor

Buat ujian untuk tindakan kedai dalam kelas PostTest:

public function testPostStoreValid()
{
    $data = [
        'title'=> 'Test Post',
        'slug' => 'test-post',
        'content' => 'Content of the post',
        'active' => true,
    ];

    $this->post('/posts', $data)
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertEquals(session('status'), 'Post was created!');
}
Salin selepas log masuk

Ujian untuk Kegagalan

Tambah kaedah ujian untuk menyemak ralat pengesahan:

public function testPostFail()
{
    $data = [
        'title'=> '',
        'content' => '',
    ];

    $this->post('/posts', $data)
         ->assertStatus(302)
         ->assertSessionHas('errors');

    $messages = session('errors')->getMessages();

    $this->assertEquals($messages['title'][0], 'The title must be at least 4 characters.');
    $this->assertEquals($messages['title'][1], 'The title field is required.');
    $this->assertEquals($messages['content'][0], 'The content field is required.');
}
Salin selepas log masuk

*Tindakan Kemas Kini Pengujian
*

Tambah kaedah ujian untuk mengemas kini siaran:

public function testPostUpdate()
{
    $post = new Post();

    $post->title = "Initial Title";
    $post->slug = Str::slug($post->title, '-');
    $post->content = "Initial content";
    $post->active = true;

    $post->save();

    $this->assertDatabaseHas('posts', $post->toArray());

    $data = [
        'title' => 'Updated Title',
        'slug' => 'updated-title',
        'content' => 'Updated content',
        'active' => false,
    ];

    $this->put("/posts/{$post->id}", $data)
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertDatabaseHas('posts', ['title' => $data['title']]);
    $this->assertDatabaseMissing('posts', ['title' => $post->title]);
}
Salin selepas log masuk

Menguji Tindakan Padam

Tambah kaedah ujian untuk memadamkan siaran:

public function testPostDelete()
{
    $post = new Post();

    $post->title = "Title to delete";
    $post->slug = Str::slug($post->title, '-');
    $post->content = "Content to delete";
    $post->active = true;

    $post->save();

    $this->assertDatabaseHas('posts', $post->toArray());

    $this->delete("/posts/{$post->id}")
         ->assertStatus(302)
         ->assertSessionHas('status');

    $this->assertDatabaseMissing('posts', $post->toArray());
}
Salin selepas log masuk

**

Menjalankan Ujian Khusus dengan PHPUnit

**

Untuk menjalankan kaedah atau kelas ujian tertentu, gunakan pilihan --filter dengan PHPUnit. Berikut ialah beberapa contoh:

Jalankan Kaedah Ujian Khusus

./vendor/bin/phpunit --filter PostTest::testPostDelete
Salin selepas log masuk

Jalankan Semua Ujian dalam Kelas Tertentu

./vendor/bin/phpunit --filter PostTest
Salin selepas log masuk

Jalankan Ujian dalam Fail Tertentu

./vendor/bin/phpunit tests/Feature/PostTest.php
Salin selepas log masuk

Output Verbose

Untuk keluaran yang lebih terperinci, tambahkan pilihan -v:

./vendor/bin/phpunit --filter PostTest::testPostDelete -v
Salin selepas log masuk

Atas ialah kandungan terperinci Panduan Komprehensif untuk Menguji 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