23/09/2026 · VietTechies · Biên tập

Một bài viết về PostgreSQL giới thiệu pgsql-test, bộ công cụ kiểm thử theo giấy phép MIT có thể chạy một cơ sở dữ liệu PostgreSQL tạm thời ngay trong trình chạy kiểm thử hiện có của ứng dụng. Công cụ khởi tạo dữ liệu một lần, đưa cơ sở dữ liệu về trạng thái đó sau mỗi bài kiểm thử bằng cách rollback giao dịch, đồng thời cho phép lập trình viên kiểm tra hành vi của cơ sở dữ liệu cùng mã JavaScript, TypeScript hoặc Python.
Vì sao mock chưa đủ
Mock có thể cho biết mã ứng dụng xử lý một kết quả dự kiến như thế nào, nhưng không thực thi khóa ngoại, trigger, hàm, ràng buộc hay chính sách bảo mật cấp hàng (row-level security, RLS) của PostgreSQL. Khoảng trống này có thể khiến các quy tắc nghiệp vụ bị chuyển vào mã ứng dụng, ngay cả khi cơ sở dữ liệu mới là nơi phù hợp hơn để áp dụng chúng.
Kiểm thử chính sách truy cập
Bộ công cụ cung cấp một client quản trị để thiết lập dữ liệu và một client ứng dụng để kiểm tra quyền cấp (grant) cùng các chính sách. Cơ chế setContext() áp dụng vai trò cơ sở dữ liệu và thông tin định danh trong giao dịch hiện tại, nhờ đó bài kiểm thử sử dụng đúng quyền mà ứng dụng thực tế dùng thay vì tài khoản quản trị tối cao, vốn có thể bỏ qua RLS.
Trong ví dụ của bài viết, một truy vấn không có bộ lọc theo chủ sở hữu vẫn phải trả về tài liệu của Alice nhưng loại tài liệu của Bob. Bài kiểm thử cung cấp vai trò đã xác thực và định danh người dùng mà chính sách yêu cầu. pgsql-test không kiểm tra token xác thực; các định danh kiểm thử phải khớp với dữ liệu mà chính sách của ứng dụng đọc.
Tích hợp trong hệ sinh thái
Việc tạo dữ liệu ban đầu do pgsql-seed đảm nhiệm, với hỗ trợ cho tệp SQL, fixture được tạo bằng mã, CSV, JSON và migration. Các tích hợp liên quan gồm supabase-test cho vai trò, schema và mặc định xác thực của Supabase; drizzle-orm-test cho truy vấn Drizzle trong giao dịch được quản lý; pglite-test với PGlite chạy trong cùng tiến trình; cùng graphile-test cho GraphQL trên schema PostGraphile và graphile-realtime-test cho kiểm thử subscription.
Các dự án và tích hợp này được mô tả là phát hành theo giấy phép MIT và có sẵn trên npm cùng PyPI. Một lần chạy supabase-test được bài viết dẫn lại cho thấy 246 bài kiểm thử trên 44 cơ sở dữ liệu hoàn tất trong bốn giây.
Từ kiểm thử cục bộ đến CI
pgpm, trình quản lý gói của Constructive dành cho PostgreSQL mô-đun, có thể tạo workspace tích hợp pgsql-test, Jest và GitHub Actions. Mặc định, getConnections() triển khai kế hoạch của mô-đun. Mỗi thay đổi đi kèm các script triển khai, xác minh và hoàn tác: bước xác minh kiểm tra schema đã được áp dụng, còn các bài kiểm thử kiểm tra schema hoạt động đúng hay không.
Workspace được tạo sẵn mở rộng cùng vòng phản hồi sang CI bằng safegres. Trong khi các bài kiểm thử xác minh hành vi cơ sở dữ liệu, safegres kiểm tra schema đã triển khai để phát hiện hồi quy về bảo mật và hiệu năng. Tác vụ CI áp dụng ngưỡng bảo mật và so sánh các phát hiện hiệu năng với đường cơ sở đã commit, ngăn thay đổi làm giảm mức bảo mật của schema hoặc tạo thêm phát hiện hiệu năng.
PostgreSQL thực thi các quy tắc, còn pgsql-test đưa việc xác minh những quy tắc đó vào vòng lặp phát triển ứng dụng.
Ảnh minh họa do AI tạo.
Nguồn: pgsql-test: Real Postgres Testing for Faster Development Loops
