28 May, 2025 by

Kiểm thử

Hardhat cung cấp môi trường sandbox cho phép chúng ta kiểm thử nhanh chóng contracts trong quá trình phát triển. Đồng thời, các tiện ích đi kèm với mocha giúp chúng ta có nhiều hướng tiếp cận và nhiều kịch bản kiểm thử.

Kiểm thử SandboxKiểm thử Sandbox

Cài đặt và thêm hardhat-chai-matchers-viem vào hardhat.config.ts

Khởi tạo Fixture

Có thể xoá file test mẫu của hardhat, test/Lock.ts.

Trong mỗi lần test với sandbox, deployFixture sẽ là cài đặt chuẩn cho các lần test đó. Với mỗi lần gọi loadFixture(deployFixture), hệ thống sẽ tạo một snapshot cho lần test đó, qua lần test khác, hệ thống sự tự reset và tạo snapshot mới.

Chạy kiểm thử với counter = 0owner sẽ là địa chỉ ví chính khi khởi tạo contract,

Tương tác với contract

Gọi increase để tăng counter lên +1.

Combo emitwithArgs giúp chúng ta nghe và kiểm thử sự kiện từ contract một các gọn gàng.

Lưu ý, ta phải dùng getAddress để tạo address checksum cho ví (tạo chữ hoa và chữ thường trong địa chỉ ví) trước khi so sánh.

Kiểm lỗi

Giả sử ta sử dụng một địa chỉ không phải owner để gọi increase, ta kỳ vọng lúc này contract sẽ cho ra lỗi.

Kết quả

Phụ lục

Hiểu cơ chế sandbox

Như đã trình bày ở trên, loadFixture(deployFixture) sẽ tạo ra một snapshot cho mỗi lần kiểm thử và reset lại cho các lần khác nhau. Để hiểu điều này ta thử thêm một kiểm thử increase one more ngay liền dưới increase

Không như suy nghĩ bình thường, đã tăng lên 1increase thì "chắc" là phải thành 2increase one more. Nhưng thực ra điều này là SAI vì loadFixture(deployFixture) đã reset lại trạng thái của counter về 0. Vì vậy, increase one more trở thành một testcase không chính xác.

Chú ý phiên bản chai-matcher

Trong tài liệu của Hardhat, @nomicfoundation/hardhat-chai-matchers là phiên bản dành cho hardhat-ethers. Còn ở trong loạt bài này, khi đang dùng hardhat-viem, ta sẽ sử dụng hardhat-chai-matchers-viem.

You have questions?

Please create issues on my GitHub for any questions.