理解测试代码

如何本地调试handler

chainSDK提供了一个简单的本地调试器用于开发者快速的调试自己的handler,这个debugger可以单进程模拟一个链的初始化,执行tx,出块等操作

准备工作

首先,需要创建一个可运行的js文件。这里我们推荐创建一个可供mocha调用的测试文件,可同时满足自动化流程测试和手动调试器调试的需要。不使用mocha的用户也可直接创建一个单纯的js文件,供调试器调用

这里是一个简单的js文件示例,可供mocha调用的测试文件可参考demo/dpos/test/test.ts

async test() {
    // step 1. 创建并初始化session
    // step 2-1. 模拟链上操作
    // step 2-2. 执行一些view函数,查看结果
    // step 2-3. 模拟链上出块,链高度增长
}

test()

step 1. 创建并初始化session、

示例代码

const logger = initLogger({loggerOptions: {console: true}});
const {err, debugger} = await createValueDebuger(initChainCreator({logger}), path.join(__dirname, '../chain'));
session = debugger.createIndependSession();
await session.init({height: 0, accounts: 4, coinbase: 0, interval: 10, preBalance: fromCoin(1)})

以上代码创建了一个debugger对象,从debugger对象创建了一个session实例,并初始化该实例

createValueDebuger函数原型

function createValueDebuger(chainCreator: ChainCreator, dataDir: string): Promise<{err: ErrorCode, debuger?: ValueChainDebuger}>

创建一个Debugger用于调试,一个Debugger可以看作一个虚拟的链实例

参数

  • chainCreator creator实例,当前可以直接填入代码initChainCreator({logger})
  • dataDir 链package目录,该目录下必须存在config.json文件。config.json文件中指定了链的共识、共识参数和handler的位置,该debugger创建的所有session都共享同样的设置
session = debugger.createIndependSession();

创建一个session. 各种调试命令都需要通过session执行。一个debugger可以创建多个独立的session, session间数据相互独立

await session.init({height: 0, accounts: 4, coinbase: 0, interval: 10, preBalance: fromCoin(1)})

初始化session, 相当于执行链的create命令。handler的genesisListener函数会被调用

该接口的具体参数说明见debugger文件

step 2. 模拟链操作

使用session的接口模拟链上操作,包括执行tx,执行view函数,链高度增长等。具体接口和说明见debugger文件

results matching ""

    No results matching ""