Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Kiểm tra trong Laravel

by
Difficulty:BeginnerLength:MediumLanguages:

Vietnamese (Tiếng Việt) translation by Vy Cam Nguyen (you can also view the original English article)

Bất kể ứng dụng bạn đang giải quyết là gì, kiểm tra là khía cạnh quan trọng và thường bị bỏ qua mà bạn nên chú ý. Hôm nay, chúng ta sẽ thảo luận về nó trong bối cảnh của framework Laravel.

Trên thực tế, Laravel đã hỗ trợ framework PHPUnit trong chính core của nó. PHPUnit là một trong những framework phổ biến nhất và được đón nhận rộng rãi bởi toàn cộng đồng PHP. Nó cho phép bạn tạo cả hai loại kiểm tra: unit và functional.

Chúng ta sẽ bắt đầu với một giới thiệu cơ bản về unit test (kiểm tra đơn vị) và functional test (kiểm tra chức năng). Khi tiếp tục, chúng ta sẽ khám phá cách tạo nên các unit test và functional test trong Laravel. Tôi giả sử rằng bạn đã quen thuộc với những điều cơ bản của framework PHPUnit vì chúng ta sẽ khám phá nó trong bối cảnh của Laravel trong bài viết này.

Unit test và functional test

Nếu bạn đã quen thuộc với framework PHPUnit, bạn nên biết rằng bạn có thể phân chia các test thành hai loại - unit test và functional test.

Trong các unit test, bạn kiểm tra tính chính xác của một hàm nhất định hoặc một phương thức. Quan trọng hơn, bạn kiểm tra logic của code tại một thời điểm nhất định.

Trong quá trình phát triển của bạn, nếu bạn thấy rằng phương thức bạn đã triển khai đang chứa nhiều logic, tốt hơn hết bạn nên chia nó thành nhiều phương thức để mỗi phương thức giữ một đoạn code hợp lý và có thể kiểm tra được.

Chúng ta hãy lướt nhanh một ví dụ lý tưởng để thực hiện unit test.

Như bạn có thể thấy, phương thức thực hiện một và chỉ một việc. Nó sử dụng hàm ucfirst để chuyển đổi một tiêu đề thành một tiêu đề bắt đầu bằng chữ hoa.

Trong khi đó, unit test được sử dụng để kiểm tra tính chính xác của một đơn vị code logic duy nhất, mặt khác, functional test cho phép bạn kiểm tra tính chính xác của trường hợp sử dụng cụ thể. Cụ thể hơn, nó cho phép bạn mô phỏng các hành động mà người dùng thực hiện trong một ứng dụng để vận hành một trường hợp sử dụng cụ thể.

Ví dụ: bạn có thể triển khai trường hợp functional test cho một số chức năng đăng nhập có thể bao gồm các bước sau.

  • Tạo yêu cầu GET để truy cập trang đăng nhập.
  • Kiểm tra nếu chúng tôi đang ở trên trang đăng nhập.
  • Tạo yêu cầu POST để đăng dữ liệu lên trang đăng nhập.
  • Kiểm tra nếu session được tạo thành công.

Vậy đó là cách bạn phải tạo ra trường hợp functional test. Từ phần tiếp theo trở đi, chúng tôi sẽ tạo các ví dụ minh họa cách tạo các trường hợp unit test và functional test trong Laravel.

Thiết lập các điều kiện bắt buộc

Trước khi chúng tôi tiếp tục và tạo các test thực sự, chúng tôi cần thiết lập một vài thứ cần sử dụng trong các test của chúng tôi.

Chúng tôi sẽ tạo model Post và migration liên quan để bắt đầu. Tiếp tục chạy lệnh artisan sau đây để tạo model Post.

Lệnh trên sẽ tạo class Post và migrate cơ sở dữ liệu liên quan.

Class model Post sẽ trông như vậy:

Và file database migration phải được tạo tại ra ở database/migrations/YYYY_MM_DD_HHMMSS_create_posts_table.php.

Chúng tôi cũng muốn lưu trữ tiêu đề của bài viết. Chúng ta hãy sửa lại code của file migration của Post như sau:

Như bạn có thể thấy, chúng tôi đã thêm cột $table->string('name') để lưu trữ tiêu đề của bài đăng. Tiếp theo, bạn chỉ cần chạy lệnh migrate để tạo ra bảng đó trong database.

Ngoài ra, hãy thay thế model Post bằng các nội dung sau.

Chúng tôi vừa thêm phương thức accessor, điều chỉnh tiêu đề của bài đăng và đó chính xác là những gì chúng tôi sẽ kiểm tra trong trường hợp unit test của chúng tôi. Đến giờ thì model Post đang được quan tâm.

Tiếp theo, chúng tôi sẽ tạo một file controller tại app/Http/Controllers/AccessorController.php. Nó sẽ hữu ích cho chúng tôi khi tạo trường hợp functional test ở giai đoạn sau.

Trong phương thức index, chúng tôi lấy id bài đăng từ các tham số yêu cầu và thử nạp đối tượng model Post.

Chúng ta hãy thêm một route có liên quan trong file routes/web.php.

Và ở đó, bạn có thể chạy http://your-laravel-site.com/accessor/index URL để xem liệu nó có hoạt động như mong đợi không.

Unit Testing

Trong phần trước, chúng tôi đã triển khai việc thiết lập ban đầu và điều đó sẽ hữu ích cho chúng tôi từ phần này trở đi. Trong phần này, chúng tôi sẽ tạo ra một ví dụ minh họa các khái niệm về unit test trong Laravel.

Như mọi khi, Laravel cung cấp một lệnh artisan cho phép bạn tạo template cơ bản của class của unit test.

Chạy lệnh sau để tạo class AccessorTest của unit test. Điều quan trọng cần lưu ý là chúng tôi sẽ truyền vào từ khóa --unit để tạo ra trường hợp unit test và nó sẽ được đặt trong thư mục tests/Unit.

Và nó sẽ tạo ra class sau đây tại tests/Unit/AccessorTest.php.

Hãy thay vào đó một số code.

Như bạn có thể thấy, code này hoàn toàn giống như trong core PHP. Chúng tôi vừa nhập các phụ thuộc dành riêng cho Laravel để sử dụng các API cần thiết. Trong phương thức testAccessorTest, chúng tôi phải kiểm tra tính chính xác của phương thức getNameAttribution của model Post.

Để làm điều đó, chúng tôi đã lấy một bài đăng mẫu từ database và chuẩn bị kết quả dự kiến trong biến $db_post_title. Tiếp theo, chúng tôi tải cùng một bài đăng bằng model Eloquent thực thi phương thức getNameAttribution để chuẩn bị tiêu đề bài đăng. Cuối cùng, chúng tôi sử dụng phương thức assertEquals để so sánh cả hai biến như bình thường.

Vậy đó là cách chuẩn bị các trường hợp unit test trong Laravel.

Functional testing

Trong phần này, chúng tôi sẽ tạo trường hợp functional test để kiểm tra chức năng của controller mà chúng tôi đã tạo ra trước đó.

Chạy lệnh sau để tạo class AccessorTest cho trường hợp functional test. Vì chúng tôi không sử dụng từ khóa --unit, nên sẽ được coi là trường hợp functional test và được đặt trong thư mục tests/Feature.

Nó sẽ tạo class sau tại tests/Feature/AccessorTest.php.

Hãy thay thế bằng code sau đây.

Một lần nữa, code sẽ trông quen thuộc với những người từng có kinh nghiệm khi functional test.

Đầu tiên, chúng tôi đang tìm nạp một bài đăng mẫu từ database và chuẩn bị kết quả dự kiến trong biến $db_post_title. Theo đó, chúng tôi cố gắng mô phỏng yêu cầu GET /accessor/index?id=1 và lấy phản hồi của yêu cầu đó trong biến $reply.

Tiếp theo, chúng tôi đã cố gắng khớp code phản hồi trong biến $response với code phản hồi dự kiến. Trong trường hợp của chúng tôi, mã code phải là 200 khi chúng tôi sẽ nhận được phản hồi hợp lệ cho yêu cầu GET của chúng tôi. Hơn nữa, phản hồi phải chứa một tiêu đề bắt đầu bằng chữ hoa và đó chính xác là những gì chúng tôi đang cố gắng làm trùng khớp bằng phương thức assertSeeText.

Và đó là ví dụ về trường hợp functional test. Bây giờ, chúng tôi có mọi thứ để chạy kiểm tra. Hãy tiếp tục chạy lệnh sau trong thư mục gốc của ứng dụng của bạn để chạy tất cả các bài kiểm tra.

Điều đó sẽ chạy tất cả các bài kiểm tra trong ứng dụng của bạn. Bạn sẽ thấy một kết quả chuẩn mực của PHPUnit hiển thị trạng thái của kiểm tra và xác nhận trong ứng dụng của bạn.

Và với điều đó, chúng tôi kết thúc bài viết ở đây.

Tổng kết

Hôm nay, chúng tôi đã khám phá chi tiết về test trong Laravel, vốn đã hỗ trợ PHPUnit trong core của nó. Bài viết bắt đầu với phần giới thiệu cơ bản về unit test và functional test, và sau đó chúng tôi đã khám phá các chi tiết cụ thể của test trong Laravel.

Trong quá trình này, chúng tôi đã xây dựng nên một số ví dụ minh họa cách bạn có thể tạo các trường hợp unit test và functional test bằng lệnh thủ công.

Nếu bạn mới bắt đầu với Laravel hoặc đang tìm cách mở rộng kiến thức, trang web hoặc ứng dụng của mình với các tiện ích mở rộng, chúng tôi có nhiều thứ bạn có thể học trong Envato Market.

Đừng ngại bày tỏ suy nghĩ của bạn bằng cách sử dụng feed dưới đây!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.