4. Testing Smart Contracts
Write Tests (test/Lock.js)
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("Lock", function () {
let lock;
let owner;
let otherAccount;
const unlockTime = Math.floor(Date.now() / 1000) + 3600; // 1 hour from now
beforeEach(async function () {
[owner, otherAccount] = await ethers.getSigners();
const Lock = await ethers.getContractFactory("Lock");
lock = await Lock.deploy(unlockTime, { value: ethers.parseEther("1") });
});
describe("Deployment", function () {
it("Should set the right unlockTime", async function () {
expect(await lock.unlockTime()).to.equal(unlockTime);
});
it("Should set the right owner", async function () {
expect(await lock.owner()).to.equal(owner.address);
});
it("Should receive and store the funds to lock", async function () {
expect(await ethers.provider.getBalance(lock.target)).to.equal(
ethers.parseEther("1")
);
});
});
describe("Withdrawals", function () {
it("Should revert with the right error if called too soon", async function () {
await expect(lock.withdraw()).to.be.revertedWith(
"You can't withdraw yet"
);
});
it("Should revert with the right error if called from another account", async function () {
await expect(lock.connect(otherAccount).withdraw()).to.be.revertedWith(
"You aren't the owner"
);
});
});
});
Run Tests
# Test on local Hardhat network
npx hardhat test
# Test with gas reporting
npx hardhat test --reporter gas
# Test specific file
npx hardhat test test/Lock.js
Last updated