Để có thể xác định được rằng những gì chúng ta code là chính xác và hoạt động đúng như mong đợi bên trong một dự án Laravel, thì bạn phải viết các bài kiểm tra, và một trong số đó là những kiểm tra liên quan đến trường dữ liệu (form) với validation của Laravel. Thường thì chúng ta khi lập trình sẽ tập trung vào các “happy case”, ví dụ như làm một cái form, chúng ta sẽ điền hết tất cả vào các trường để submit và chạy cho ra kết quả, và hầu hết chúng ta đều code theo tư duy này.
validation
Vậy, chuyện gì sẽ xảy ra nếu như người dùng không làm giống như những gì chúng ta mong đợi, hay được gọi là “unhappy case”? Thật tuyệt vời nếu người dùng luôn thao tác đúng mọi thứ và nhập đầy đủ hoặc không sai khác gì khi chúng ta tạo ra một form nhập dữ liệu, nhưng thực tế thì…
Việc kiểm tra sự logic của các trường dữ liệu sẽ giúp chúng ta giải quyết được vấn đề này. Chúng ta hãy thử xem xét một trường văn bản trên biểu mẫu (form) và một số loại kiểm tra mà chúng ta có thể viết.
Dưới đây là quy tắc xác thực biểu mẫu mà mình đưa ra ví dụ:
$rules = [ 'name' => [ 'required', 'max:255', ], 'content' => [ 'required', 'max:65535', ], ];
Và bên dưới đây là cách mà chúng ta kiểm tra trường bắt buộc:
$values = []; $response = $this->post(route('post-route-name'), $values); $response->assertSessionHasErrors([ 'name' => 'Trường name (tên) là bắt buộc.', 'content' => 'Trường content (nội dung) là bắt buộc.', ]);
Và chúng ta có thể kiểm tra độ dài của name và content như sau:
name
content
$values = [ 'name' => str_repeat('a', 256), 'content' => str_repeat('a', 65536), ]; $response = $this->post(route('post-route-name'), $values); $response->assertSessionHasErrors([ 'name' => 'Trường name (tên) phải có độ dài không được lớn hơn 255 ký tự.', 'content' => 'Trường content (nội dung) phải có độ dài không được lớn hơn 65536 ký tự.', ]);
Việc sử dụng hàm str_repeat() có thể giúp bạn dễ dàng tạo ra một chuỗi để có thể quét và đọc trong việc kiểm tra hơn so với việc bạn phải đặt một chuỗi có tới 255 ký tự trong bài kiểm tra của bạn.
str_repeat()
Vậy, bạn có thể viết những bài test này và nhóm chúng lại với nhau. Mình thường gom lại việc test các trường required và các trường min:lenght lại với nhau, như vậy thì sẽ không phải làm quá nhiều bài test cho một ứng dụng.
required
min:lenght
Đến đây thì mẹo thứ hai đã kết thúc, rất cảm ơn bạn đã chịu khó đọc đến đây, nếu có chỗ nào khó hiểu, bạn có thể để lại bình luận, mình sẽ trả lời lại cho các bạn trong sự hiểu biết của mình nhé. Hẹn gặp lại bạn trong mẹo tiếp theo.