Testing dengan Fixture (loadFixture)
Penjelasan
Deploy contract baru di setiap `beforeEach` bisa memperlambat test suite besar karena mengulang proses deployment berkali-kali. Fungsi `loadFixture` dari `@nomicfoundation/hardhat-network-helpers` mengatasi ini dengan menjalankan fungsi setup (deploy contract, dsb) hanya sekali, lalu menyimpan snapshot state EVM — pemanggilan berikutnya cukup me-revert ke snapshot itu, jauh lebih cepat daripada deploy ulang dari nol. Pola umum: definisikan fungsi `async function deployFixture()` yang melakukan semua setup dan mengembalikan objek berisi contract/signer yang dibutuhkan, lalu panggil `await loadFixture(deployFixture)` di awal tiap `it()` untuk mendapatkan state segar tanpa biaya deploy ulang.
Contoh Konsep
const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers");
const { expect } = require("chai");
describe("SimpleBank dengan fixture", function () {
async function deployBankFixture() {
const [owner, user] = await ethers.getSigners();
const Bank = await ethers.getContractFactory("SimpleBank");
const bank = await Bank.deploy();
return { bank, owner, user };
}
it("harus mulai dengan saldo 0", async function () {
const { bank, user } = await loadFixture(deployBankFixture);
expect(await bank.getBalance(user.address)).to.equal(0);
});
});
Praktikum
Refactor test SimpleBank yang sudah kamu tulis sebelumnya agar memakai loadFixture, dengan fixture men-deploy bank dan mengembalikan signer owner serta user.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan satu fixture yang bisa dipakai ulang oleh banyak `it()` dalam satu `describe`, alih-alih membuat fixture terpisah tiap test — ini yang memaksimalkan manfaat kecepatan snapshot.