Các loại testing trong Laravel và cách hoạt động của từng loại

Như các bạn đã biết, việc viết Unit Test là rất quan trọng trong phát triển phần mềm. Nó đảm bảo tính đúng đắn và tin cậy của ứng dụng, giúp lập trình viên phát hiện sớm những lỗi tiềm ẩn trong mã nguồn. Đặc biệt trong các dự án với thị trường Nhật, việc viết Unit Test gần như là một yêu cầu bắt buộc. Trong bài viết này, chúng ta sẽ điểm qua các loại Unit Test chính trong Laravel và cách thức hoạt động của từng loại.

Tổng quan về Unit Test trong Laravel

Laravel hỗ trợ quá trình kiểm thử thông qua hai công cụ chính: PestPHPUnit. Trong bài viết này, chúng tôi sẽ tập trung vào PHPUnit – công cụ được tích hợp sẵn trong Laravel để thực hiện việc kiểm thử.

Các loại Test chính trong Laravel

Các loại test mà chúng ta sẽ tìm hiểu trong chủ đề này bao gồm:

  1. Unit Test
  2. Feature Test
  3. HTTP Test
  4. Console Test
  5. Database Mocking

1. Unit Test

Unit Test là các bài kiểm thử tập trung vào việc kiểm tra các thành phần nhỏ nhất của ứng dụng. Điều này có nghĩa là chúng ta sẽ kiểm tra các phương thức của class hoặc các hàm độc lập. Mục tiêu chính của Unit Test là đảm bảo rằng từng thành phần hoạt động đúng như mong đợi.

READ  Hướng Dẫn Cài Đặt Homestead Laravel

Ví dụ về Unit Test


Trong ví dụ này, chúng ta kiểm tra phương thức full_name của Model User để đảm bảo rằng nó trả về đúng tên đầy đủ.

2. Feature Test

Feature Test (còn gọi là Integration Test) kiểm tra sự tương tác của nhiều thành phần trong ứng dụng, bao gồm các tuyến (routes), middleware, controllers và views. Đây là dạng kiểm thử giúp chúng ta xác minh rằng các thành phần hoạt động đúng khi kết hợp với nhau.

Ví dụ về Feature Test

 

Trong ví dụ này, chúng ta kiểm tra xem liệu có thể tạo mới một người dùng và lưu trữ thông tin của người dùng đó vào cơ sở dữ liệu hay không.

3. HTTP Tests

Khi viết các bài kiểm thử, nhiều khi chúng ta cần phải kiểm tra các tính năng của một ứng dụng như xoá, cập nhật, hoặc một logic nào đó liên quan đến routes, middleware, controllers và views. Vì vậy, việc viết HTTP tests là rất quan trọng trong các Feature Test.

HTTP Tests giúp kiểm tra các yêu cầu HTTP được gửi đến ứng dụng Laravel. Những bài kiểm thử này mô phỏng các yêu cầu như GET, POST, PUT, DELETE và kiểm tra phản hồi từ ứng dụng.

Laravel Testing 01/24: Why Test Your Code Automatically? - YouTube

Ví dụ về HTTP Test

  1. Tạo Route và Controller
// Route (trong routes/web.php hoặc routes/api.php)
use App\Http\Controllers\UserController;

Route::post('/users', [UserController::class, 'store']);
  1. Tạo HTTP Test

Sử dụng lệnh Artisan để tạo một HTTP test:

php artisan make:test UserTest

Tệp test sẽ chứa các phương thức như sau:

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use App\Models\User;

class UserTest extends TestCase {
    use RefreshDatabase;

    /** @test */
    public function it_can_create_a_user() {
        $response = $this->postJson('/users', [
            'name' => 'John Doe',
            'email' => 'john@example.com',
            'password' => 'password123',
        ]);
        
        $response->assertStatus(201)
                 ->assertJson(['user' => ['name' => 'John Doe', 'email' => 'john@example.com']]);
        
        $this->assertDatabaseHas('users', ['email' => 'john@example.com']);
    }

    /** @test */
    public function it_requires_a_name() {
        $response = $this->postJson('/users', [
            'email' => 'john@example.com',
            'password' => 'password123',
        ]);
        
        $response->assertStatus(422)
                 ->assertJsonValidationErrors('name');
    }
}

4. Console Tests

Trong Laravel, Console Tests cho phép bạn kiểm tra các lệnh Artisan, bao gồm cả các lệnh tùy chỉnh mà bạn tạo ra. Việc này rất hữu ích trong việc đảm bảo rằng các lệnh của bạn hoạt động như mong đợi.

READ  Hướng Dẫn Chi Tiết Cách chạy Raw Queries Trong Laravel

Ví dụ về Console Test

Giả sử bạn có một lệnh Artisan tùy chỉnh để tạo người dùng mới. Đầu tiên, hãy tạo lệnh Artisan bằng cách sử dụng lệnh sau trong terminal:

php artisan make:command CreateUser

Sau đó, bạn có thể kiểm tra lệnh này bằng cách viết một bài test trong thư mục tests/Feature.

namespace Tests\Feature;

use Tests\TestCase;
use Artisan;

class CreateUserTest extends TestCase {
    public function testCreateUserCommand() {
        $this->artisan('create:user', [
              'name' => 'John Doe',
              'email' => 'john@example.com',
              'password' => 'password123',
        ])->expectsOutput('User created successfully!')
          ->assertExitCode(0);
    }
}

5. Database Mocking

Database Mocking là một kỹ thuật cho phép bạn kiểm thử các thành phần mà không cần phải thao tác trực tiếp với cơ sở dữ liệu thực, do đó giúp tiết kiệm thời gian và tăng tốc độ kiểm thử. Trong Laravel, bạn có thể sử dụng mô hình giả (mock) để kiểm tra các phương thức mà không cần phải truy cập dữ liệu thực tế.

Kết luận

Trong bài viết này, Hoclaravel đã tổng hợp giúp bạn các loại Unit Test trong Laravel và cách thức hoạt động của từng loại. Việc viết các bài kiểm thử không chỉ giúp tăng tính đúng đắn và đáng tin cậy cho ứng dụng mà còn giúp phát hiện và sửa lỗi một cách dễ dàng hơn trong quá trình phát triển.

Hy vọng rằng với những thông tin trên, các bạn đã có cái nhìn rõ hơn về các loại test trong Laravel. Hãy áp dụng những kiến thức này vào dự án của bạn để nâng cao chất lượng phần mềm nhé!

READ  Laravel Artisan là gì? Kiến thức giao diện PHP mà bạn nên biết

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *