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ử 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 = 0
và owner
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 emit
và withArgs
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 1
ở increase
thì "chắc" là phải thành 2
ở increase 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
.