solidity 로 ERC20 컨트랙트를 다 짰으면 hardhat 을 사용하여 deploy 하기 전에
먼저 트랜잭션에 대한 테스트 상황을 가정하고 정상적으로 작동하는지 확인해야 한다.
뭐 My Ether Wallet 이나 메타마스크로 수동 테스트 진행해도 상관 없으나
내 소중한 테스트이더를 낭비하고 싶지 않을 뿐더라 명령어 하나로 다양한 상황을 빠르게 테스트하기 위해서는 필수 관문이다.
아래 명령어를 입력하면 되는데 물론 이게 끝은 아니고..!
npx hardhat test
일단 테스트 코드 작성법은 hardhat testing contract 를 참고하였다.
1. expect
hardhat test 코드에서는 처음 보는 모듈인 'chai' 의 expect 를 쓴다.
아래 코드는 deploy 한 후 토큰 오너에게 metaData에서 설정한 총 발행량(공급량)만큼 제대로 발행되었는지 확인하는 작업이다.
const { expect } = require("chai");
describe("Token contract", function () {
it("Deployment should assign the total supply of tokens to the owner", async function () {
const [owner] = await ethers.getSigners();
const Token = await ethers.getContractFactory("Token");
const hardhatToken = await Token.deploy();
const ownerBalance = await hardhatToken.balanceOf(owner.address);
expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);
});
});
2. loadFixture
위에서 deploy 후 최초 상태를 스냅샷 찍어놓고 필요한 변수들을 return 하면
다른 케이스를 테스트할 때 새로 배포할 필요 없이 같은 상태로 간주하고 테스트 진행할 수 있다.
만약 스냅샷 상태가 필요 없을 경우, 그냥 it 해서 상태값 그대로 테스트 진행하면 됨~!
const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers");
const { expect } = require("chai");
describe("Token contract", function () {
const { hardhatToken, owner, addr1, addr2 } = await loadFixture(
deployTokenFixture
);
});
3. connect
owner 외의 다른 계정인 address 의 컨트랙트 호출할 때 사용한다.
connect(호출하는 EoA).컨트랙트 함수(인자값들)
await expect(hardhatToken.connect(addr1).transfer(addr2.address, 50))
.to.emit(hardhatToken, "Transfer")
.withArgs(addr1.address, addr2.address, 50);
- view 함수와 트랜잭션 실행 함수의 차이를 좀 더 명확히 핸들링할 필요가 있다.
- 아직 모르는 함수! withArgs
참고문서링크
https://hardhat.org/tutorial/testing-contracts
'solidity' 카테고리의 다른 글
22.08.29 락업이란? (0) | 2022.08.29 |
---|---|
21.07.28 diamond problem (0) | 2021.07.28 |
21.07.27 ERC-20 Token Contract (0) | 2021.07.28 |
21.07.23 Token Role (0) | 2021.07.26 |
21.07.22 Mint & Burn Token (2) | 2021.07.24 |