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

Cách tạo Database Testing trong Laravel

Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo và sử dụng Database Testing trong Laravel. Chúng ta sẽ đi qua các bước để tạo bộ test, viết các test case và chạy các test case để kiểm tra cơ sở dữ liệu của ứng dụng.

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.

Nếu bạn đang phát triển một ứng dụng Laravel và muốn đảm bảo rằng cơ sở dữ liệu của bạn hoạt động đúng cách, hãy tiếp tục đọc để tìm hiểu cách sử dụng Database Testing trong Laravel.

1. Database Testing trong Laravel là gì?

database testing laravel png
Database testing trong Laravel

Database Testing trong Laravel là quá trình kiểm tra tính đúng đắn và khả năng hoạt động của cơ sở dữ liệu trong ứng dụng Laravel thông qua các test case. Trong quá trình này, Laravel cung cấp cho chúng ta một số công cụ để tạo và quản lý cơ sở dữ liệu trong môi trường test, giúp cho việc kiểm tra các tính năng của cơ sở dữ liệu được dễ dàng hơn.

Bằng cách sử dụng Database Testing, chúng ta có thể đảm bảo rằng cơ sở dữ liệu trong ứng dụng hoạt động chính xác và ổn định, từ đó giúp nâng cao chất lượng của ứng dụng.

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

2. Sử dụng gì để tạo database testing trong Laravel?

Trong Laravel, bạn có thể sử dụng SQLite để tạo database testing. SQLite là một cơ sở dữ liệu nhỏ, được lưu trữ trong một file và thường được sử dụng để thực hiện kiểm thử phần mềm. Với SQLite, bạn có thể tạo và xóa các bảng trong cơ sở dữ liệu một cách nhanh chóng và dễ dàng, giúp cho việc kiểm thử trở nên dễ dàng hơn.

Để sử dụng SQLite cho database testing trong Laravel, bạn cần cấu hình các giá trị trong file phpunit.xml của Laravel như sau:

<php>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="DB_DATABASE" value=":memory:"/>
</php>

Ở đây, chúng ta đang cấu hình Laravel để sử dụng SQLite làm database cho các kiểm thử. Các giá trị DB_CONNECTION DB_DATABASE được đặt là sqlite và :memory: tương ứng. Giá trị :memory: sẽ tạo một database ảo trong bộ nhớ của hệ thống để sử dụng trong quá trình kiểm thử.

Sau khi đã cấu hình xong, bạn có thể chạy các kiểm thử và Laravel sẽ tạo và sử dụng SQLite database để thực hiện các kiểm thử của bạn.

3. Các bước tạo database testing trong Laravel

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

Bước 1: Cài đặt Laravel và thiết lập cơ sở dữ liệu

Để cài đặt Laravel và thiết lập cơ sở dữ liệu của Database Testing trong Laravel, bạn cần thực hiện các bước sau:

Cài đặt Laravel: Bạn có thể cài đặt Laravel bằng Composer bằng cách sử dụng lệnh sau trong terminal:

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

Trong đó project-name là tên của dự án Laravel mà bạn muốn tạo.

Thiết lập cơ sở dữ liệu: Bạn cần thiết lập cơ sở dữ liệu để sử dụng cho việc kiểm tra. Có thể sử dụng cơ sở dữ liệu SQLite hoặc MySQL.

  • Sử dụng SQLite: Để sử dụng SQLite, bạn cần cài đặt SQLite trên máy tính của mình. Sau đó, chỉnh sửa file .env bằng cách thay đổi cấu hình DB_CONNECTION thành sqlite và thêm đường dẫn đến file SQLite trong DB_DATABASE:
DB_CONNECTION=sqlite
DB_DATABASE=/path/to/database.sqlite
  • Sử dụng MySQL: Để sử dụng MySQL, bạn cần cài đặt MySQL và chỉnh sửa file .env bằng cách thay đổi cấu hình DB_CONNECTION thành mysql và cung cấp các thông tin kết nối cho DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, và DB_PASSWORD.

Bước 2: Khai báo thông tin kết nối cơ sở dữ liệu trong file .env

Tạo file .env.testing: Tạo một file mới có tên .env.testing trong thư mục gốc của ứng dụng Laravel.

Khai báo thông tin kết nối cơ sở dữ liệu: Mở file .env.testing và khai báo thông tin kết nối cơ sở dữ liệu cho môi trường testing. Ví dụ

APP_NAME=Laravel
APP_ENV=testing
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_test
DB_USERNAME=root
DB_PASSWORD=

Trong đó, các giá trị khai báo phù hợp với thông tin kết nối cơ sở dữ liệu của bạn. Chú ý rằng, tên cơ sở dữ liệu ở đây là laravel_test để phân biệt với cơ sở dữ liệu sử dụng cho môi trường production.

Bước 3: Tạo model và migration

Tạo model: Sử dụng lệnh Artisan để tạo model

php artisan make:model User

Lệnh trên sẽ tạo một model User trong thư mục app/Models.

Tạo migration: Sử dụng lệnh Artisan để tạo migration

php artisan make: migration create_users_table --create=users

Lệnh trên sẽ tạo một migration create_users_table trong thư mục database/migrations để tạo bảng users trong cơ sở dữ liệu. Tham số --create=users xác định tên bảng cần tạo.

Chỉnh sửa migration: Chỉnh sửa migration để định nghĩa cấu trúc bảng. Mở file migration vừa tạo trong thư mục database/migrations và thêm các cột cần thiết cho bảng users:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

Trong ví dụ trên, bảng users có các cột: id, name, email, email_verified_at, password, remember_token, created_at, updated_at.

Chạy migration: Chạy migration để tạo bảng users trong cơ sở dữ liệu. Sử dụng lệnh Artisan để chạy migration:

php artisan migrate

Lệnh trên sẽ chạy migration để tạo bảng users trong cơ sở dữ liệu.

Sau khi hoàn thành các bước trên, bạn đã tạo được model và migration cho Database Testing trong Laravel. Bạn có thể sử dụng chúng để kiểm tra tính đúng đắn của ứng dụng của mình.

Bước 4: Tạo seeders

Tạo file seeder mới: Sử dụng artisan command để tạo một file seeder mới bằng cách chạy lệnh sau:

php artisan make:seeder TestingDatabaseSeeder

Sửa file seeder: Mở file seeder mới tạo và chỉnh sửa nội dung tương ứng với dữ liệu mẫu mà bạn muốn thêm vào cơ sở dữ liệu của môi trường testing.

Ví dụ:

use Illuminate\Database\Seeder;
use App\Models\User;

class TestingDatabaseSeeder extends Seeder
{
    public function run()
    {
        User::create([
            'name' => 'John Doe',
            'email' => 'johndoe@example.com',
            'password' => bcrypt('password'),
        ]);
    }
}

Trong đó, bạn có thể thay đổi nội dung tương ứng với dữ liệu mẫu của ứng dụng của bạn.

Chạy seeder: Chạy lệnh sau để thêm dữ liệu mẫu vào cơ sở dữ liệu cho môi trường testing:

php artisan db:seed --class=TestingDatabaseSeeder --env=testing

Lệnh trên sẽ chạy seeder và thêm dữ liệu mẫu vào cơ sở dữ liệu cho môi trường testing.

Sau khi hoàn thành các bước trên, bạn đã tạo seeders cho Database Testing trong Laravel và có thể sử dụng chúng để thêm dữ liệu mẫu vào cơ sở dữ liệu của môi trường testing.

Bước 5: Tạo test case

Tạo một test case mới: Sử dụng artisan command để tạo một test case mới bằng cách chạy lệnh sau:

php artisan make:test DatabaseTest --unit

Trong đó, DatabaseTest là tên test case mới bạn muốn tạo.

Bước 6: Kiểm tra dữ liệu trong cơ sở dữ liệu

Để kiểm tra dữ liệu trong cơ sở dữ liệu của Database Testing trong Laravel, có nhiều phương thức khác nhau. Dưới đây là một số phương thức thông dụng:

assertDatabaseHas(): Phương thức này được sử dụng để kiểm tra xem một bản ghi có tồn tại trong cơ sở dữ liệu hay không. Phương thức này nhận vào hai tham số: tên bảng và một mảng chứa các điều kiện để kiểm tra. Ví dụ:

// Kiểm tra xem bản ghi với id là 1 có tồn tại trong bảng 'users' hay không
$this->assertDatabaseHas('users', ['id' => 1]);

assertDatabaseMissing(): Phương thức này được sử dụng để kiểm tra xem một bản ghi không tồn tại trong cơ sở dữ liệu hay không. Phương thức này cũng nhận vào hai tham số giống như phương thức assertDatabaseHas().

Ví dụ:

// Kiểm tra xem bản ghi với id là 100 không tồn tại trong bảng 'users'
$this->assertDatabaseMissing('users', ['id' => 100]);

seeInDatabase(): Phương thức này được sử dụng để kiểm tra xem một bản ghi có tồn tại trong cơ sở dữ liệu hay không. Tuy nhiên, phương thức này sử dụng cú pháp khác so với assertDatabaseHas().

Ví dụ:

// Kiểm tra xem bản ghi với email là 'john.doe@example.com' có tồn tại trong bảng 'users'
$this->seeInDatabase('users', ['email' => 'john.doe@example.com']);

dontSeeInDatabase(): Phương thức này được sử dụng để kiểm tra xem một bản ghi không tồn tại trong cơ sở dữ liệu hay không. Phương thức này cũng sử dụng cú pháp tương tự seeInDatabase().

Ví dụ:

// Kiểm tra xem bản ghi với email là 'jane.doe@example.com' không tồn tại trong bảng 'users'
$this->dontSeeInDatabase('users', ['email' => 'jane.doe@example.com']);

assertDatabaseCount(): Phương thức này được sử dụng để kiểm tra số lượng bản ghi trong cơ sở dữ liệu. Phương thức này nhận vào ba tham số: tên bảng, số lượng bản ghi mong đợi và một mảng chứa các điều kiện để kiểm tra.

Ví dụ:

// Kiểm tra xem bảng 'users' có chứa 5 bản ghi
$this->assertDatabaseCount('users', 5);

assertDatabaseHasMissingRelation(): Phương thức này được sử dụng để kiểm tra xem một mối quan hệ của một bảng với một bảng khác có tồn tại hoặc không. Phương thức này nhận vào các tham số tên bảng gốc, tên bảng liên kết, tên cột khóa ngoại và giá trị khóa ngoại.

Ví dụ:

// Kiểm tra xem bảng 'posts' có mối quan hệ với bảng 'users' qua khóa ngoại 'user_id' với giá trị 1
$this->assertDatabaseHasMissingRelation('posts', 'users', 'user_id', 1);

assertDatabaseHasTable(): Phương thức này được sử dụng để kiểm tra xem một bảng có tồn tại trong cơ sở dữ liệu hay không. Phương thức này nhận vào một tham số là tên bảng cần kiểm tra.

Ví dụ:

// Kiểm tra xem bảng 'users' có tồn tại trong cơ sở dữ liệu hay không
$this->assertDatabaseHasTable('users');

assertDatabaseMissingTable(): Phương thức này được sử dụng để kiểm tra xem một bảng không tồn tại trong cơ sở dữ liệu hay không. Phương thức này cũng nhận vào một tham số là tên bảng cần kiểm tra.

Ví dụ:

// Kiểm tra xem bảng 'fake_table' không tồn tại trong cơ sở dữ liệu
$this->assertDatabaseMissingTable('fake_table');

Bước 7: Chạy các test case

Sau khi đã viết các test case cho Database Testing trong Laravel, bạn cần chạy chúng để kiểm tra xem chúng có đúng như mong đợi hay không. Dưới đây là các bước để chạy test case của Database Testing trong Laravel:

Mở Terminal hoặc Command Prompt.

Đi đến thư mục gốc của project Laravel bằng lệnh cd và tên thư mục. Ví dụ:

cd myproject

Chạy lệnh php artisan test để chạy toàn bộ các test case trong project Laravel, bao gồm cả Database Testing. Ví dụ:

php artisan test

Bạn cũng có thể chỉ chạy các test case liên quan đến Database Testing bằng cách thêm option --filter với giá trị là tên class test case hoặc tên method test case. Ví dụ:

php artisan test --filter MyDatabaseTest

Sau khi chạy, Laravel sẽ trả về kết quả của các test case. 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" trên màn hình. Nếu có bất kỳ test case nào thất bại, bạn sẽ thấy thông báo lỗi chi tiết về test case đó.

4. Lưu ý khi khi thay đổi cấu trúc cơ sở dữ liệu

Khi thay đổi cấu trúc cơ sở dữ liệu của ứng dụng, ta cần cập nhật lại test case của Database Testing để đảm bảo rằng các test case đang sử dụng vẫn đúng và chính xác.

Để cập nhật test case, ta cần làm theo các bước sau:

Xác định các thay đổi cấu trúc cơ sở dữ liệu

Trước tiên, ta cần xác định những thay đổi cấu trúc cơ sở dữ liệu đã được thực hiện, bao gồm thêm, xóa, sửa các bảng, trường, khóa ngoại, index, trigger,...

Chỉnh sửa test case

Dựa trên những thay đổi cấu trúc cơ sở dữ liệu đã xác định, ta cần chỉnh sửa test case tương ứng để phù hợp với cấu trúc cơ sở dữ liệu mới. Cụ thể, ta có thể thay đổi các truy vấn SQL, giá trị input và output của các trường dữ liệu,...

Chạy test case và kiểm tra kết quả

Sau khi cập nhật test case, ta cần chạy lại các test case để kiểm tra xem chúng có hoạt động đúng như mong đợi hay không. Nếu kết quả kiểm tra không như mong đợi, ta cần sửa lại test case và chạy lại cho đến khi kết quả kiểm tra đúng.

Lưu ý đến tính đồng bộ

Nếu thay đổi cấu trúc cơ sở dữ liệu ảnh hưởng đến nhiều thành phần của ứng dụng, ta cần đảm bảo tính đồng bộ giữa các thành phần. Điều này có nghĩa là ta cần cập nhật cả Unit Testing và Feature Testing để đảm bảo tính chính xác và đồng bộ của toàn bộ test case.

Trong tổng quát, để đảm bảo tính ổn định và độ tin cậy của ứng dụng, ta nên thực hiện các test case thường xuyên và đảm bảo rằng chúng đang hoạt động đúng với cấu trúc cơ sở dữ liệu mới nhất.

5. Một số câu hỏi liên quan về Database Testing trong Laravel

Tại sao chúng ta cần sử dụng Database Testing trong Laravel?

Chúng ta cần sử dụng Database Testing để đảm bảo rằng các chức năng liên quan đến cơ sở dữ liệu của ứng dụng hoạt động đúng, đáp ứng được yêu cầu của người dùng và đảm bảo tính ổn định và độ tin cậy của ứng dụng.

Làm thế nào để tạo test case cho Database Testing trong Laravel?

Để tạo test case cho Database Testing trong Laravel, chúng ta sử dụng các phương thức như assertDatabaseHas(), assertDatabaseMissing(), assertDatabaseCount(), assertDatabaseHasMissingRelation(), assertDatabaseHasTable(), và assertDatabaseMissingTable(). Mỗi phương thức sẽ có các tham số khác nhau để giúp kiểm tra dữ liệu trong cơ sở dữ liệu của ứng dụng.

Làm thế nào để chạy test case của Database Testing trong Laravel?

Để chạy test case của Database Testing trong Laravel, chúng ta sử dụng lệnh php artisan test trong Terminal hoặc Command Prompt. Nếu tất cả các test case đều chạy thành công, chúng ta sẽ thấy thông báo "OK" trên màn hình.

Làm thế nào để đảm bảo tính ổn định và độ tin cậy của ứng dụng Laravel?

Để đảm bảo tính ổn định và độ tin cậy của ứng dụng Laravel, chúng ta cần thường xuyên kiểm tra các chức năng liên quan đến cơ sở dữ liệu bằng Database Testing, cũng như sử dụng các công cụ kiểm tra mã nguồn và thực hiện các test case khác như Unit Testing và Feature Testing. Ngoài ra, cần thực hiện các công việc bảo trì, cập nhật và tối ưu hóa mã nguồn thường xuyên để giảm thiểu lỗi và tăng tính ổn định của ứng dụng.

6. Kết bài viết

Trong bài viết này, chúng ta đã tìm hiểu cách tạo và sử dụng Database Testing trong Laravel. Database Testing giúp cho chúng ta có thể kiểm tra các chức năng liên quan đến cơ sở dữ liệu trong ứng dụng Laravel của mình một cách dễ dàng và nhanh chóng.

Để tạo test case cho Database Testing trong Laravel, chúng ta sử dụng các phương thức như assertDatabaseHas(), assertDatabaseMissing(), assertDatabaseCount(), assertDatabaseHasMissingRelation(), assertDatabaseHasTable(), và assertDatabaseMissingTable(). Mỗi phương thức sẽ có các tham số khác nhau để giúp kiểm tra dữ liệu trong cơ sở dữ liệu của ứng dụng.

Sau khi đã viết các test case, chúng ta có thể chạy chúng bằng lệnh php artisan test trong Terminal hoặc Command Prompt. Nếu tất cả các test case đều chạy thành công, chúng ta sẽ thấy thông báo "OK" trên màn hình.

Việc sử dụng Database Testing trong Laravel là một trong những cách tốt nhất để đảm bảo rằng ứng dụng của bạn hoạt động đúng và đáp ứng được yêu cầu của người dùng. Chúng ta nên thường xuyên kiểm tra các chức năng liên quan đến cơ sở dữ liệu để đảm bảo tính ổn định và độ tin cậy của ứng dụng.

Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về cách tạo và sử dụng Database Testing trong Laravel.

#Top link tham khảo cách tạo và sử dụng Database Testing trong Laravel

  1. Các option khác về cách chạy test case :https://laravel.com/docs/testing#running-tests

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 dùng Browser Testing (Laravel Dusk) trong Laravel

Cách dùng Browser Testing (Laravel Dusk) trong Laravel

Top