체인의정석

hardhat + ether js 로 스마트컨트렉트 테스트 코드 작성할 때 알아야 할 3가지 대표 유형 본문

블록체인/Ethers & web3

hardhat + ether js 로 스마트컨트렉트 테스트 코드 작성할 때 알아야 할 3가지 대표 유형

체인의정석 2022. 3. 3. 20:03
728x90
반응형

크게 3가지 유형으로 나뉘며, 이걸 제대로 못할 시 에러가 나게 된다.

스마트컨트렉트 개발에 가장 큰 시간을 들여야 하는 부분은 역시 테스트 코드가 아닌가 싶다.

반복되는 부분을 정리하여 나중에 해메지 않아야 하기 때문에 이쯤에서 다시한번 정리하고 넘어가도록 하겠다.

 

1. 함수를 실행하고 이벤트를 남겼는지 체크

 

이 경우 await로 전체를 감싸준다. 이벤트가 발생되었는지 체크하는 시점은 함수 전체가 실행 되고 난 이후이기 때문이다.

it("Should setBridge in Contract", async () => {
  await expect(컨트렉트이름.함수명(입력값1, 입력값2))
  .to.emit(컨트렉트이름, "이벤트이름")
  .withArgs(이벤트값1, 이벤트값2)
})

 

2. 오류가 제대로 발생하는 지 체크하는 경우 (require문 체크)

 

이 경우에도 await를 전체적으로 감싸준다. 예외상황이 발생하며 오류가 나는것 까지 한번에 진행 해도 되기 때문이다.

it("Should return error if bridge is not set", async () => {
  await expect(mapping.mapToken(입력값1,입력값2))
  .to.be.revertedWith(
    "require 문에 포함된 오류메세지"
  )
})

 

3. 반환값이 정확한지 체크

 

이 경우 값을 반환해주는 부분에 await를 걸고 그걸 expect로 감싼 후 값을 비교한다. 값이 나오가 나서 해당 값이 일치하는지 확인해야 하기 때문이다.

 

it("Should retrun correct bridge address", async () => {
  expect(await 컨트렉트명.함수명(입력값))
  .to.equal(기대값)
})

 

위 3가지가 대표적인 유형이며, 그 외에도

.to.be.true 와 같이 참거짓을 판단하는 케이스나 

      it("Should retrun correct bridge address", async () => {
        expect(await mapping.isBridge(bridge.address))
        .to.be.true;
      })

ethers.constants.AddressZero 와같이 예외 처리에 많이 쓰이는 변수들 

그 외에도 keccack256에 대한 유틸 함수등이 테스트 코드 작성시에 추가적으로 조사하여 작성해야 하는 부분들이며, 해당 내용들은 블로그에 이미 정리를 해두었다.

728x90
반응형
Comments