Cheatcodes Dasar (vm.prank, vm.deal, vm.expectRevert)
Penjelasan
Cheatcode adalah fungsi khusus yang hanya tersedia di lingkungan test Foundry, diakses lewat objek global `vm`. Cheatcode memungkinkan kita memanipulasi state EVM secara langsung tanpa perlu transaksi asli — misalnya `vm.prank(address)` membuat pemanggilan berikutnya seolah dikirim dari address tertentu, `vm.deal(address, amount)` mengisi saldo ETH sebuah address secara instan. `vm.expectRevert()` dipakai untuk menguji bahwa suatu pemanggilan fungsi memang harus gagal (revert) dengan pesan tertentu — dipanggil sebelum baris kode yang diharapkan revert. Kombinasi cheatcode ini membuat skenario testing kompleks (multi-user, multi-saldo, kondisi error) bisa ditulis ringkas tanpa setup rumit.
Contoh Konsep
function testOnlyOwnerCanWithdraw() public {
address alice = address(0x1);
address bob = address(0x2);
// Beri Bob saldo 5 ETH secara instan
vm.deal(bob, 5 ether);
// Pemanggilan berikutnya seolah dikirim dari alice
vm.prank(alice);
// Diharapkan revert karena alice bukan owner
vm.expectRevert("Not owner");
vault.withdraw(1 ether);
}
Praktikum
Tulis test yang memberi address bernama user saldo 10 ether dengan vm.deal, lalu memanggil fungsi deposit sebagai user tersebut menggunakan vm.prank.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan `vm.startPrank(addr)` dan `vm.stopPrank()` kalau butuh beberapa pemanggilan berturut-turut dari address yang sama, bukan mengulang vm.prank tiap baris.