编写测试示例
此页面展示了如何为在Blueprint SDK(Sandbox)中创建的FunC合约编写测试。
测试套件为演示合约fireworks构建。Fireworks是一个通过set_first消息初始化运行的智能合约。
通过npm create ton@latest创建一个新的FunC项目后,测试文件tests/contract.spec.ts将自动生成在项目目录中,用于测试合约:
import ...
describe('Fireworks', () => {
...
        expect(deployResult.transactions).toHaveTransaction({
...
        });
});
it('should deploy', async () => {
    // the check is done inside beforeEach
    // blockchain and fireworks are ready to use
});
使用以下命令运行测试:
npx blueprint test
可以通过blockchain.verbosity指定附加选项和vmLogs:
blockchain.verbosity = {
    ...blockchain.verbosity,
    blockchainLogs: true,
    vmLogs: 'vm_logs_full',
    debugLogs: true,
    print: false,
}
直接 cell 测试
Fireworks演示了在TON区块链中发送消息的不同操作。
一旦你有足够TON金额并通过set_first消息部署它,它将使用主要和可用的发送模式组合自动执行。
Fireworks重新部署自己,结果将创建3个Fireworks实体,每个实体都有自己的ID(被保存在存储中),因此有不同的智能合约地址。
为了清晰起见,我们定义不同ID的Fireworks实例(不同的state_init)并以下列名称命名:
- 1 - Fireworks setter - 传播不同启动操作码的实体。可以扩展到四种不同的操作码。
- 2 - Fireworks launcher-1 - 启动第一个firework的Fireworks实例,意味着消息将被发送给launcher。
- 3 - Fireworks launcher-2 - 启动第二个firework的Fireworks实例,意味着消息将被发送给launcher。
展开交易细节
index - 是launchResult数组中交易的ID。
- 0- 对资金库(the Launcher)的外部请求,导致向fireworks发送2.5 TON的出站消息- op::set_first
- 1- 在Fireworks setter合约中使用- op::set_first调用的交易,并执行了两个出站消息到Fireworks Launcher-1和Fireworks Launcher-2
- 2- 在Fireworks launcher 1中使用- op::launch_first调用的交易,并执行了四个出站消息到the Launcher。
- 3- 在Fireworks launcher 2中使用- op::launch_second