Truffle 에서 개발, 배포, 테스팅 까지 원큐에 끝낼 수 있습니다.
Truffle Test
Truffle에서 테스트를 할 수 있는 방법은 2가지가 있습니다. solidity파일로도 가능하고, test.js 파일로도 가능합니다. 두가지 모두 진행해본 결과 개인적으로 js 파일로 테스팅을 진행하는게 안정적이고 빠른 코드 작성이 가능했습니다. 컨트랙트에서 계정을 따로 설정해주는 부분에서 Mocha 테스트 프레임워크 기반의 test.js 이 편했습니다.
1. 컨트랙트 코드 작성
간단한 컨트랙트 코드를 작성합니다. 이름은 Noonoo고 val 변수의 값을 설정하고 읽어오는 컨트랙트입니다.
pragma solidity ^0.8.7;
contract SampleContract {
uint public val;
string public name;
constructor(){
name = "Noonoo";
}
function set(uint x) public {
val = x;
}
function get() public returns(uint){
uint _val = val;
return _val;
}
}
2. 배포 진행
가볍게 배포를 진행합니다. migrations 폴더 내에 deploy.js 파일을 작성합니다.
const SampleContract = artifacts.require("SampleContract");
module.exports = function(deployer){
deployer.deploy(SampleContract);
}
3. 테스트 파일 작성
chai 모듈을 설치합니다.
$ npm i chai
chai 라이브러리에서 assert를 가져옵니다.
const assert = require('chai').assert;
4. 배포한 컨트랙트 연결하기
artifacts에는 배포된 컨트랙트의 정보가 담겨있습니다. 컨트랙트의 이름을 통해 가져올 수 있습니다.
const SampleContract = artifacts.require("SampleContract");
web3 객체에 provider를 공급해줍니다. Truffle Develop의 기본 네트워크 포트는 9545입니다.
const web = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:9545/'));
Truffle 테스트에서는 describe 함수 대신 contract 함수를 사용합니다.
이 때, 첫번째 인자에는 컨트랙트 이름을, 두번째 인자로는 accounts를 인자로 받는 함수를 받습니다.
contract 내부에서는 beforeEach() 함수는 동일하게 사용합니다. 유닛 테스트 시나리오를 담은 it 함수가 실행될 때 마다 beforeEach 함수가 작동합니다.
아래 코드는 컨트랙트 객체를 정상적으로 받아와서 계정 정보를 정상적으로 받아오는지 테스트하는 코드입니다.
contract("SampleContract", async (accounts) => {
let sc;
beforeEach(async ()=>{
sc = await SampleContract.deployed();
})
it('account test', ()=>{
assert.ok(accounts.length > 0, 'ok');
})
})
Truffle console 이 켜져 있는 상태라면 test 명령어를 입력하고 터미널 환경에서는 truffle test 명령어를 입력합니다.
truffle(develop)> test
Using network 'develop'.
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Contract: SampleContract
✔ account test
1 passing (173ms)
'Blockchain' 카테고리의 다른 글
Decentralized Identifiers(DIDs) Reference 모음 (0) | 2022.08.31 |
---|---|
[Solved] Error: truffle-plugin-verify listed as a plugin, but not found in global or local node modules! (1) | 2022.08.22 |
Truffle develop account 확인 (기본 사용 방법) (1) | 2022.08.20 |
Truffle Ropsten Deploy config migrate Testnet에 컨트랙트 배포 + verify 방법 (0) | 2022.08.12 |
[회고록] 첫번째 프로젝트(Opensea) 시작 (0) | 2022.08.08 |
댓글