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: Pest và PHPUnit. 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:
- Unit Test
- Feature Test
- HTTP Test
- Console Test
- 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.
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.
Ví dụ về HTTP Test
- 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']);
- 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.
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é!