본문 바로가기
Blockchain

[블록체인 만들기 #3] Unit Test (Jest)

by 개발자 염상진 2022. 10. 9.

 

이전 포스팅에서는 블록과 블록헤더를 생성하고, GENESIS 블록까지 만드는 방법을 알아보았습니다. 이제 생성된 블록들이 정상적으로 연결되는지 확인해볼 필요가 있습니다.

 

 

Typescript Unit Test는 Jest로 진행해보겠습니다. Node.js 환경에서 Unit Test 프레임워크로는 Mocha, Jest가 있지만 Typescript에서 사용하기 위해서는 추가적인 환경설정이 필요합니다. 이런 불편한 추가설정을 하면서 까지 Typescript를 이용하는 이유는 그만큼 TS가 제공하는 정적 타입의 프로그램이 파워풀하기 때문입니다.

 

 

Jest, Unit Test 환경구성

 

Jest를 사용하기 위해서 필요한 모듈을 설치해줍니다.

$ npm i -D ts-jest @types/jest babel-core @babel/preset-typescript @babel/preset-env

 

  • ts-jest : Typescript 환경에서 Jest를 쓸수있도록 지원하는 모듈
  • @types/jest : Jest 타입 정의 파일
  • babel-core : Javascript 컴파일러 Babel의 코어 모듈
  • @babel/preset-typescript : Typesciprt를 babel에서 사용하기 위한 모듈
  • @babel/preset-env : babel 환경구성 모듈

 

환경구성 파일

babel.config.js

module.exports = {
  presets: [
    [
      "babel/preset-env",
      {
        targets: { node: "current" },
      },
    ],
    "@babel/preset-typescript",
  ],
};
💡 Babel config Reference

 

 

jest.config.ts

import type { Config } from "@jest/types";
const config: Config.InitialOptions = {
  moduleFileExtensions: ["ts", "js"],
  // 테스트 코드 파일 지정
  testMatch: ["<rootDir>/**/*.test.(js|ts)"],
  moduleNameMapper: {
    // 테스트 파일 경로 지정
    "^@core/(.*)$": "<rootDir>/src/core/$1",
  },
  testEnvironment: "node",
  // 테스트 진행 상황 확인
  verbose: true,  
  preset: "ts-jest",
};
 
export default config;
💡 Jest config Reference

 

Jest 실행

 

src/core/blockchain/block.test.ts 파일을 생성하고 테스트 코드를 작성합니다.

GENESIS 블록을 import 해서 generateBlock을 하는 코드입니다.

Jest나 Mocha에서는 Describe 단위로 테스트를 묶을 수 있고, it() 함수를 통해 최소단위의 테스트를 구성할 수 있습니다. 

import { Block } from "@core/blockchain/block";
import { GENESIS } from "@core/config";
 
describe("#1 Block 검증", () => {
  let newBlock: Block;
 
  it("블록 생성 테스트", () => {
    const data = ["Block #2"];
 
    newBlock = Block.generateBlock(GENESIS, data);
 
    console.log(newBlock);
  });
});

 

환경구성이 완료되면 Unit Test를 실행합니다.

npx jest

 

 

Genesis 블록을 가져와 정상적으로 다음 블록이 생성됩니다.

 


 

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

댓글