P1 -TESTING TRONG LARAVEL - BẮT ĐẦU

P1 -TESTING TRONG LARAVEL - BẮT ĐẦU

Chào các bạn, lại là mình là lập trình viên “Gà” đây. Sau đây mình sẽ giới thiệu cho các bạn một series blog về TESTING trong LARAVEL.

Trước giờ mình chỉ toàn code mà chưa từng viết test trong Laravel bao giờ, mình cũng chỉ mới tìm hiểu qua về Testing trong Laravel nếu bạn giống mình thì chúng ta cùng bắt đầu tìm hiểu về Testing trong Laravel…....Trong series này mình sẽ chỉ đưa ra những điều mà mình thấy là căn bản và cần thiết nhất để phục vụ cho việc testing trong Laravel. Nếu bạn muốn các thông tin cực chi tiết là đầy đủ mình khuyên bạn nên tìm đọc phần testing trên trang chủ của Laravel nhé!

Giờ thì, BẮT ĐẦU THÔI !!!

Giới thiệu

Laravel được xây dựng với mục đích testing. Trên thực tế, hỗ trợ testing với PHPUnit đã được bao gồm sẵn và một tệp `phpunit.xml `đã được thiết lập cho ứng dụng của bạn. Framework này cũng đi kèm với các phương thức trợ giúp thuận tiện cho phép bạn kiểm tra các ứng dụng của mình một cách rõ ràng.

Theo mặc định, thư mục `test` ứng dụng của bạn chứa hai thư mục: `Feature`và `Unit.` Unit tests  là các tests tập trung vào một phần rất nhỏ, tách biệt trong mã của bạn. Trên thực tế, hầu hết unit tests có lẽ tập trung vào một method duy nhất. Các test trong thư mục test "Unit" của bạn không khởi động ứng dụng Laravel của bạn và do đó không thể truy cập cơ sở dữ liệu ứng dụng của bạn hoặc các dịch vụ framework khác.

Feature tests có thể kiểm tra phần lớn code của bạn, bao gồm cách một số đối tượng tương tác với nhau hoặc thậm chí là một yêu cầu HTTP đầy đủ tới điểm cuối JSON. Nói chung, hầu hết các tests của bạn phải là feature tests. Các loại testsnày cung cấp sự tin tưởng nhất rằng toàn bộ hệ thống của bạn đang hoạt động như dự kiến.

Một tệp ` ExampleTest.php ` được cung cấp trong cả thư mục `Feature` và `Unit`. Sau khi cài đặt một ứng dụng Laravel mới, hãy thực thi các lệnh vendor/bin/phpunit hoặc php artisan test để chạy các test của bạn.

Môi trường

Khi chạy các tests, Laravel sẽ tự động đặt môi trường cấu hình thành `testing` do các biến môi trường được xác định trong tệp `phpunit.xml`. Laravel cũng tự động định cấu hình phiên và bộ nhớ cache cho `array` driver trong khi testing, có nghĩa là không có dữ liệu phiên hoặc bộ nhớ cache nào được duy trì trong khi testing.

Bạn có thể tự do xác định các giá trị cấu hình môi trường  testing khác nếu cần. Các biến môi trường testing có thể được định cấu hình trong tệp  phpunit.xml ứng dụng của bạn , nhưng hãy đảm bảo xóa bộ nhớ cache cấu hình của bạn bằng lệnh Artisan`config:clear`trước khi chạy tests của bạn!

Tạo Tests

Để tạo một trường hợp test, hãy sử dụng lệnh Artisan `make:test`. Theo mặc định các test sẽ được đặt trong thư mục `tests/Feature`

VD: php artisan make:test UserTest

Nếu bạn muốn tạo một test trong thư mục `test/Unit` bạn có thể sử dụng tùy chọn `--unit` khi thực hiện lệnh make:test

Vd:  php artisan make:test UserTest --unit

Nếu bạn muốn tạo một test PHP Pest, bạn có thể cung cấp tùy chọn --pest cho lệnh make:test

VD:  php artisan make:test UserTest --pest

php artisan make:test UserTest --unit --pest

Khi test đã được tạo, bạn có thể xác định các method kiểm tra như bạn thường làm khi sử dụng PHPUnit. Để chạy các test của bạn hãy thực hiện lệnh vendor/bin/phpunit hoặc php artisan test từ terminal.

assertTrue(true); } }

Chạy tests

Như đã đề cập ở bên trên, khi bạn đã viết các tests. Bạn có thể cạy chúng bằng phpunit

./vendor/bin/phpunit

Ngoài lệnh phpunit ban có thể sử dụng lệnh Artisan test để chạy các tests của mình. Trình chạy test Artisan cung cấp các báo cáo test chi tiết để dễ dàng phát triển và gỡ lỗi

php artisan test

Bất kỳ đối số nào có thể được chuyển cho lệnh phpunit cũng có thể truyền cho lệnh test Artisan

php artisan test --testsuite=Feature --stop-on-failure

Chạy test song song

Theo mặc định, Laravel và PHPUnit thực thi tuần tự các test trong một quy trình duy nhất. Tuy nhiên bạn có thể giảm đáng kể thời gian khi chạy các test bằng cách chạy các test đồng thời trên nhiều quy trình.

php artisan test --parallel

Làm thế nào để viết test đạt yêu cầu:

Một test đạt yêu cầu thường có 3 thành phần:

  • Arrange: thiết lập trạng thái, khởi tạo Object, giả lập mock
  • Act: Chạy đúng method ta đang cần test
  • Assert: So sánh kết quả mong đợi với kết quả trả về

Tài liệu ở đâu để học và sử dụng được Testing trong Laravel nhanh và hiệu quả?

Đây là ý kiến của riêng mình: Mình đã đọc rất nhiều bài viết trên Google về Testing trong Laravel nhưng mình thấy hầu hết các bài viết đều nói rất qua qua, chủ yếu nói lý thuyết căn bản mà không có hướng dẫn thực hành chi tiết, các ví dụ cũng không có giải thích rõ ràng kiểu như chỉ dành cho người hiểu tương đối về Testing rồi thậm chí có nhiều ví dụ còn quá cơ bản kiểu như assertTrue(true) ?? Làm những người bắt đầu tiếp cận với Testing Laravel như mình khá khó khăn trong việc tìm tài liệu để học Testing.

Nên là mình thấy để học cách Testing trong Laravel một cách nhanh chóng là bạn nên tự tạo một project và thực hành viết test trên đó, có khó khăn bạn có thể lên trang chủ của Laravel đọc những thứ cơ bản nhất để xử lý, hoặc có thể xem một vài video trên Youtube.

Hoặc các bạn hãy đón chờ series Testing Laravel này của mình. Mình sẽ cố gắng làm chi tiết nhất về Testing Laravel vì mình cũng đang bắt đầu tìm hiểu về Test mà :D

Tham khảo thêm tại: https://laravel.com/docs/8.x/testing#running-tests-in-parallel

Link bài tiếp theo

THAM KHẢO:

Testing: Getting Started - Laravel - The PHP Framework For Web Artisans