LARAVEL TUTORIALS
10 thủ thuật Lavavel giúp bạn code nhanh hơn! Routing trong Laravel, cách tạo Route và sử dung AZ Tạo Middleware trong Laravel đơn giản trong 5 phút Xử lý Authentication và Authorization trong Laravel Event và listener trong Laravel, cách tạo và quản lý cơ bản nhất Tạo broadcast event trong Laravel dễ dàng trong 10 phút Xử lý Form Validation trong Laravel từ A - Z Cách tạo Session và cookie trong Laravel dễ dàng như ăn cháo Top 10 Package Lavavel thường dùng trong dự án Laravel Sử dụng Task trong Laravel đơn giản trong 10 phút. Cách tạo API trong Laravel đơn giản chỉ trong 5 phút Cách tạo job trong Laravel sao cho hiệu quả? Queues trong Laravel, dùng để xử lý các tác vụ mất nhiều thời gian Cache trong Laravel, các loại Cache thường dùng trong Laravel Redis trong Laravel, biết cách sử dung Redis Laravel trong 5 phút Sử dụng Memcache trong Laravel tăng tốc độ truy cập website Unit Test trong Laravel, thực hành tạo testing Laravel A-Z 10 thủ thuật tối ưu quá trình Testing trong Laravel Top 7 thư viện Testing Laravel được dùng nhiều nhất Testbench và Orchestra Testbench trong Laravel, kiểm thử Laravel dễ dàng Cách dùng Browser Testing (Laravel Dusk) trong Laravel Cách tạo test case cho Controller trong Laravel Cách tạo test case cho Model trong Laravel Cách tạo Database Testing trong Laravel Real-time web applications là gì ? Tầm quan trọng trong Laravel Laravel WebSockets, các bước tạo WebSockets trong Laravel Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime Cách dùng Long polling trong Laravel để cải thiện trải nghiệm Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ Cách dùng Event Sourcing trong Laravel Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản Sử dụng Service Container trong Laravel dễ dàng Cách xử lý đa ngôn ngữ trong Laravel dễ dàng Tìm hiểu và sử dụng Service Provider trong Laravel Facades là gì? Cách dùng Facades trong Laravel Cách sử dụng Email Verification trong Laravel Cách dùng URL Generation trong Larevel Cách sử dụng Error Handling trong Laravel Cách dùng Encryption và decryption trong Laravel Cách sử dụng Relationships trong Laravel Bài 01: Laravel là gì? Hướng dẫn cài đặt laravel trên windows Sử dụng Event trong Laravel Một cách quản lý filter trong Laravel
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Unit Test trong Laravel, thực hành tạo testing Laravel A-Z

Cách sử dụng Unit Test trong Laravel để giúp tối ưu quy trình làm việc kiểm thử chương trình trong quá trình sử dụng Laravel làm dự án.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Bạn có bao giờ đặt câu hỏi cho mình: "Làm thế nào để đảm bảo tính đúng đắn của ứng dụng web mình?".

Nếu câu trả lời của bạn là việc thực hiện unit test trong Laravel, thì bạn đã đúng! Unit test là một phần quan trọng trong việc phát triển ứng dụng web, đặc biệt là trong Laravel. Hãy cùng tìm hiểu về cách thực hiện unit test trong Laravel từ A-Z để đảm bảo tính đúng đắn và tin cậy của ứng dụng của bạn!

Unit Test trong Laravel là gì?

testing 1  jpg

Bài viết này được đăng tại [free tuts .net]

Unit test trong Laravel là việc kiểm tra các thành phần của ứng dụng Laravel, như model, controller, middleware, route, service provider, và các thành phần khác, để đảm bảo rằng chúng hoạt động đúng đắn và theo đúng kỳ vọng của chúng ta. Việc thực hiện unit test cho Laravel giúp đảm bảo tính đúng đắn và tin cậy của ứng dụng, giúp phát hiện lỗi sớm và dễ dàng sửa chữa chúng.

Nó cũng giúp đảm bảo rằng các thay đổi trong mã nguồn không ảnh hưởng đến các tính năng hiện có của ứng dụng và giúp bảo vệ chúng khỏi các lỗi không mong muốn. Bên cạnh đó, việc thực hiện unit test còn giúp tăng tốc độ phát triển, giảm chi phí kiểm thử và tăng khả năng bảo trì của ứng dụng.

Các bước tạo Testing Laravel

Để tạo một testing Laravel, bạn có thể thực hiện các bước sau:

Bước 1: Cài đặt Laravel

Để bắt đầu với testing Laravel, bạn cần cài đặt Laravel trên máy tính của mình. Có nhiều cách để cài đặt Laravel, nhưng cách phổ biến nhất là sử dụng Composer.

Bạn có thể sử dụng lệnh sau để cài đặt Laravel:

composer create-project --prefer-dist laravel/laravel project-name

Bước 2: Cài đặt PHPUnit

PHPUnit là một framework testing được sử dụng phổ biến cho PHP. Laravel sử dụng PHPUnit để thực hiện các test case của nó.

Để cài đặt PHPUnit, bạn có thể sử dụng Composer:

composer require --dev phpunit/phpunit

Bước 3: Tạo test case

Để tạo test case trong Laravel, bạn có thể sử dụng các lệnh Artisan command.

Ví dụ, để tạo một test case mới trong thư mục tests/Unit, bạn có thể sử dụng lệnh make:test như sau:

php artisan make:test TenTestCase --unit

Trong đó, TenTestCase là tên của test case mới bạn muốn tạo. Thêm tùy chọn --unit để chỉ định loại test case là unit test.

Nếu bạn muốn tạo một test case cho tính năng (feature) thay vì unit test, bạn có thể sử dụng tùy chọn --feature:

php artisan make:test TenFeatureTest --feature

Lệnh trên sẽ tạo một file test case mới với tên là TenTestCase.php hoặc TenFeatureTest.php tùy vào loại test case bạn chọn. File test case sẽ được lưu trong thư mục tests/Unit hoặc tests/Feature tương ứng.

Sau khi đã tạo test case mới, bạn có thể định nghĩa các phương thức test case trong đó bằng cách sử dụng các phương thức kiểm tra được cung cấp bởi Laravel. Ví dụ, bạn có thể sử dụng phương thức assertTrue() để kiểm tra một giá trị là đúng, hoặc sử dụng phương thức assertEquals() để kiểm tra sự bằng nhau của hai giá trị.

<?php

namespace Tests\Unit;

use Tests\TestCase;

class TenTestCase extends TestCase
{
    /** @test */
    public function it_can_add_two_numbers()
    {
        $result = 1 + 1;

        $this->assertEquals(2, $result);
    }
}

Trong ví dụ trên, ta định nghĩa một phương thức test case it_can_add_two_numbers() để kiểm tra tính đúng đắn của phép cộng hai số. Ta sử dụng phương thức assertEquals() để so sánh giá trị của biến $result với giá trị kỳ vọng là 2. Nếu giá trị của biến $result không bằng 2, test case sẽ bị thất bại.

Bước 4: Chạy test case

Để chạy test case, bạn có thể sử dụng lệnh sau:

php artisan test

Lệnh này sẽ chạy tất cả các test case trong thư mục /tests. Nếu bạn muốn chỉ chạy một test case cụ thể, bạn có thể sử dụng tên file hoặc tên class của test case đó:

php artisan test tests/Unit/UserControllerTest.php 

Cách kiểm tra kết quả của Unit Test trong Laravel

Kiểm tra kết quả trên command line

Khi bạn chạy Unit Test trên command line bằng câu lệnh php artisan test, kết quả sẽ được hiển thị trên màn hình console.

Nếu tất cả các test case đều chạy thành công, bạn sẽ thấy thông báo "OK" hoặc "Passed". Nếu có bất kỳ test case nào bị lỗi, thông báo lỗi sẽ được hiển thị trên màn hình console.

Kiểm tra kết quả trên giao diện trình duyệt

Để kiểm tra kết quả trên giao diện trình duyệt trong Laravel, ta có thể sử dụng Laravel Dusk - một công cụ cho phép thực hiện các test End-to-End trên trình duyệt. Các test End-to-End sẽ giúp cho chúng ta kiểm tra các chức năng của ứng dụng trong môi trường gần giống với thực tế nhất.

Để bắt đầu sử dụng Laravel Dusk, ta cần cài đặt công cụ này vào project Laravel bằng cách chạy lệnh sau:

php artisan dusk:install

Sau khi cài đặt thành công, ta có thể bắt đầu viết các test End-to-End bằng cách thực hiện các thao tác trên trình duyệt giống như một người dùng thực sự. Để kiểm tra kết quả trên giao diện trình duyệt, ta có thể sử dụng các method có sẵn của Laravel Dusk như assertSee, assertSeeIn, assertPathIs, assertUrlIs,.... Các method này sẽ giúp ta kiểm tra xem trang web có hiển thị đúng thông tin và điều hướng đến đúng địa chỉ không.

Ví dụ:

use Illuminate\Foundation\Testing\WithFaker;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class ExampleTest extends DuskTestCase
{
    use WithFaker;

    public function testExample()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('/login')
                    ->type('email', 'johndoe@example.com')
                    ->type('password', 'password')
                    ->press('Login')
                    ->assertPathIs('/dashboard')
                    ->assertSee('Welcome to Dashboard');
        });
    }
}

Trong ví dụ trên, ta thực hiện việc đăng nhập vào ứng dụng và kiểm tra xem sau khi đăng nhập, trình duyệt có điều hướng đến trang dashboard và hiển thị thông báo "Welcome to Dashboard" không. Các thao tác này được thực hiện thông qua các method của Laravel Dusk và giúp ta kiểm tra chức năng của ứng dụng trên giao diện trình duyệt.

Kiểm tra kết quả trong file logs

Để kiểm tra kết quả trong file logs của ứng dụng Laravel, ta có thể sử dụng các công cụ và phương pháp trong Unit Testing của Laravel.

Trong Laravel, ta có thể sử dụng trait InteractsWithLogs để truy cập vào các thông tin logs của ứng dụng.

Ví dụ:

use Illuminate\Foundation\Testing\Concerns\InteractsWithLogs;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use InteractsWithLogs;

    public function testExample()
    {
        // Thực hiện các thao tác kiểm tra logs
        $this->assertLogHas('log_level', 'Log message');
        $this->assertLogHasNot('error', 'Log message');
    }
}

Trong ví dụ trên, ta sử dụng method assertLogHas để kiểm tra xem trong logs có chứa thông tin log như mong muốn không. Nếu có, test sẽ được đánh dấu là passed, ngược lại, test sẽ bị failed.

Kiểm tra kết quả trong file HTML report

Bạn có thể sử dụng package PHPUnit để thực hiện các unit test cho ứng dụng của mình. Khi chạy các unit test, PHPUnit sẽ tạo ra một tập tin HTML report chứa kết quả của các test.

Để kiểm tra kết quả trong file HTML report này, bạn có thể làm theo các bước sau:

  1. Chạy các unit test bằng cách chạy lệnh php artisan test trong terminal.
  2. Khi các unit test kết thúc, PHPUnit sẽ tạo ra một file HTML report có tên là report.html trong thư mục ./storage/app/.
  3. Mở file report.html bằng trình duyệt web để xem kết quả của các unit test.
  4. Tìm kiếm các thông tin cần kiểm tra trong file HTML report bằng cách sử dụng các công cụ tìm kiếm của trình duyệt.

Ví dụ, nếu bạn muốn kiểm tra xem các test đã chạy có thành công hay không, bạn có thể tìm kiếm các dòng chứa từ khóa "Failed" trong file HTML report. Nếu không có dòng nào chứa từ khóa này, các test đã chạy thành công.

Ngoài ra, Laravel cũng cung cấp một số công cụ để giúp bạn phân tích kết quả của các unit test. Ví dụ, bạn có thể sử dụng lệnh để tạo ra một báo cáo về việc độ bao phủ của các test trên mã nguồn của ứng dụng. Sau khi chạy lệnh này, bạn có thể truy cập vào thư mục ./storage/app/coverage để xem các file HTML report về độ bao phủ của các test.

php artisan test --coverage-html=coverage

Một số câu hỏi liên quan Unit Test trong Laravel

1. Tại sao chúng ta cần sử dụng Unit Test trong Laravel?

Việc sử dụng Unit Test giúp cho các nhà phát triển giảm thiểu các lỗi phát sinh và tăng tính đáng tin cậy của ứng dụng, cũng như tiết kiệm thời gian và tài nguyên trong quá trình phát triển.

2. Laravel cung cấp các công cụ nào để thực hiện Unit Test?

Laravel cung cấp cho chúng ta các công cụ mạnh mẽ để thực hiện Unit Test, chẳng hạn như PHPUnit, Laravel Dusk và Laravel Browser Kit.

3. Làm thế nào để tạo Unit Test trong Laravel?

Để tạo Unit Test trong Laravel, bạn cần tạo các file test, viết test case và kiểm tra kết quả bằng các câu lệnh assert. Bạn cũng có thể sử dụng các thư viện phổ biến như PHPUnit để tạo các test case phức tạp hơn.

4. Làm thế nào để tích hợp Unit Test vào quá trình phát triển trong Laravel?

Bạn có thể tích hợp Unit Test vào quá trình phát triển bằng cách chạy các test case trong quá trình phát triển và chuyển các kết quả kiểm tra sang cho các nhà phát triển khác để xử lý. Ngoài ra, Laravel cũng cung cấp các công cụ tích hợp test case vào các công cụ CI/CD như Jenkins hay Travis CI.

Kết bài viết

Trong bài viết này, chúng ta đã thực hành tạo testing Laravel A-Z để kiểm tra chất lượng mã nguồn. Unit Test là một phương pháp kiểm tra chất lượng mã nguồn phổ biến trong Laravel, giúp bạn kiểm tra tính đúng đắn và đáp ứng các yêu cầu kỹ thuật của ứng dụng.

Chúng ta đã đi qua các bước cơ bản để tạo Unit Test trong Laravel, từ tạo các file test, viết test case và kiểm tra kết quả bằng các câu lệnh assert. Chúng ta cũng đã học cách sử dụng các thư viện phổ biến như PHPUnit để tạo các test case phức tạp hơn.

Bên cạnh đó, chúng ta cũng đã thực hành tích hợp Unit Test vào quá trình phát triển bằng cách chạy các test case trong quá trình phát triển và chuyển các kết quả kiểm tra sang cho các nhà phát triển khác để xử lý.

Việc sử dụng Unit Test không chỉ giúp cho các nhà phát triển giảm thiểu các lỗi phát sinh và tăng tính đáng tin cậy của ứng dụng mà còn giúp tiết kiệm thời gian và tài nguyên trong quá trình phát triển.

Tóm lại, việc sử dụng Unit Test là rất quan trọng trong quá trình phát triển phần mềm và Laravel cung cấp cho chúng ta các công cụ mạnh mẽ để thực hiện việc này. Nếu bạn đang phát triển ứng dụng Laravel, hãy nắm vững kiến thức về Unit Test và tích hợp nó vào quy trình phát triển của mình để đảm bảo chất lượng mã nguồn tốt nhất.

#Top 2 link tham khảo về Unit Test trong Laravel

  1. Unit test Controller trong Laravel :https://freetuts.net/cach-tao-test-case-cho-controller-trong-laravel-5693.html
  2. Unit test Model trong Laravel :https://freetuts.net/cach-tao-test-case-cho-model-trong-laravel-5696.html
  3. Database testing trong Laravel :https://freetuts.net/database-testing-trong-laravel-5697.html

Cùng chuyên mục:

Cách sử dụng Relationships trong Laravel

Cách sử dụng Relationships trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách dùng URL Generation trong Larevel

Cách dùng URL Generation trong Larevel

Cách sử dụng Email Verification trong Laravel

Cách sử dụng Email Verification trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Sử dụng Service Container trong Laravel dễ dàng

Sử dụng Service Container trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách dùng Event Sourcing trong Laravel

Cách dùng Event Sourcing trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Real-time web applications là gì ? Tầm quan trọng  trong Laravel

Real-time web applications là gì ? Tầm quan trọng trong Laravel

Cách tạo Database Testing trong Laravel

Cách tạo Database Testing trong Laravel

Top