Các Thực Hành Tốt Nhất Khi Viết Test Laravel
Kiểm thử đảm bảo ứng dụng của bạn hoạt động đúng như mong đợi. Laravel cung cấp một framework kiểm thử mạnh mẽ giúp bạn duy trì các ứng dụng chất lượng cao. Dưới đây là một số thực hành tốt nhất và kỹ thuật nâng cao:
Sử Dụng Factory
Tạo dữ liệu test bằng factory để giữ cho các test của bạn gọn gàng và tập trung:
$user = User::factory()->create();
Bạn cũng có thể tùy chỉnh dữ liệu factory:
$user = User::factory()->create([
'email' => 'test@example.com',
]);
Viết Feature Test
Feature test đảm bảo ứng dụng của bạn hoạt động đúng như mong đợi:
public function test_home_page_loads() {
$response = $this->get('/');
$response->assertStatus(200);
}
Sử dụng assertion để xác thực nội dung response:
$response->assertSee('Welcome');
Mock Các Dịch Vụ Bên Ngoài
Sử dụng mock để mô phỏng các API bên ngoài và tránh thực hiện các HTTP request thật:
Http::fake([
'api.example.com/*' => Http::response(['success' => true], 200),
]);
Test Xác Thực
Đảm bảo xác thực hoạt động chính xác:
public function test_authenticated_user_can_access_dashboard() {
$user = User::factory()->create();
$response = $this->actingAs($user)->get('/dashboard');
$response->assertStatus(200);
}
Sử Dụng Data Provider
Data provider cho phép bạn chạy một test với nhiều bộ dữ liệu khác nhau:
/**
* @dataProvider userDataProvider
*/
public function test_user_creation($name, $email) {
$response = $this->post('/users', [
'name' => $name,
'email' => $email,
]);
$response->assertStatus(201);
}
public function userDataProvider() {
return [
['John Doe', 'john@example.com'],
['Jane Doe', 'jane@example.com'],
];
}
Chạy Test Song Song
Tăng tốc bộ test của bạn bằng cách chạy các test song song:
php artisan test --parallel
Transaction Cơ Sở Dữ Liệu
Sử dụng transaction cơ sở dữ liệu để đảm bảo trạng thái sạch giữa các test:
protected function setUp(): void {
parent::setUp();
$this->beginDatabaseTransaction();
}
Các Thực Hành Tốt Nhất
- Tổ Chức Test: Nhóm các test một cách logic (ví dụ:
Feature,Unit,Integration). - Viết Tên Test Mô Tả: Sử dụng tên có ý nghĩa để mô tả test làm gì.
- Tránh Hardcode Dữ Liệu: Sử dụng factory hoặc data provider cho dữ liệu test động.
- Chạy Test Thường Xuyên: Tự động hóa test với CI/CD pipeline để phát hiện lỗi sớm.
- Tập Trung Vào Hành Vi: Test hành vi của ứng dụng, không phải chi tiết implementation.
Các Trường Hợp Sử Dụng Thực Tế
- Test Upload File:
public function test_file_upload() {
$file = UploadedFile::fake()->image('avatar.jpg');
$response = $this->post('/upload', [
'file' => $file,
]);
$response->assertStatus(200);
}
- Test API Endpoint:
public function test_api_returns_users() {
User::factory()->count(3)->create();
$response = $this->getJson('/api/users');
$response->assertStatus(200)
->assertJsonCount(3, 'data');
}
- Test Tính Năng Phức Tạp: Viết test cho các quy trình nhiều bước như luồng thanh toán hoặc đăng ký người dùng.
Bằng cách tuân theo các thực hành tốt nhất này và tận dụng các công cụ kiểm thử của Laravel, bạn có thể đảm bảo ứng dụng của mình luôn đáng tin cậy và dễ bảo trì theo thời gian.