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

Panduan Komprehensif untuk Menguji dalam Laravel dengan PHPUnit

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBasal
2024-07-29 06:56:53805semak imbas

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);
}

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

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>

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

php artisan config:clear

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

Buat ujian untuk laluan profil:

php artisan make:test ProfileTest

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

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

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'),
    ]) : [],
],

Menjalankan Ujian Pangkalan Data

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

./vendor/bin/phpunit

Panduan Komprehensif untuk Menguji dalam Laravel dengan PHPUnit

Contoh: Menguji Pendaftaran Pengguna

Buat ujian untuk pendaftaran pengguna:

php artisan make:test UserTest

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']);
}

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!');
}

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.');
}

*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]);
}

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());
}

**

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

Jalankan Semua Ujian dalam Kelas Tertentu

./vendor/bin/phpunit --filter PostTest

Jalankan Ujian dalam Fail Tertentu

./vendor/bin/phpunit tests/Feature/PostTest.php

Output Verbose

Untuk keluaran yang lebih terperinci, tambahkan pilihan -v:

./vendor/bin/phpunit --filter PostTest::testPostDelete -v

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!

Kenyataan:
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
Artikel sebelumnya:Pasang Laravel Baharu 11Artikel seterusnya:Pasang Laravel Baharu 11