新闻详情

新闻详情

首页 / 资讯中心 / 详情

Truffle测试实战:如何用Mocha+Chai自动化测试你的智能合约

发布时间:2026/11/5 9:24:42来源:尧图网络
Truffle测试实战:如何用Mocha+Chai自动化测试你的智能合约
Truffle测试实战如何用MochaChai自动化测试你的智能合约【免费下载链接】truffle:warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over the years.项目地址: https://gitcode.com/gh_mirrors/tr/truffleTruffle 内置的测试框架让智能合约测试变得极其简单——基于 Mocha Chai一条truffle test命令即可自动部署合约并运行全部断言。本文面向新手手把手带你掌握 Truffle 测试的完整流程搭建测试文件、编写用例、断言交易结果、验证事件发射并理解快照回滚带来的加速原理。1. 为什么选择 Truffle 测试在传统 Web3 开发中测试一个智能合约通常需要手动部署、手动调用 RPC、手动比对返回值。Truffle 把这些工作压缩成三件事能力说明 自动部署运行测试前自动执行迁移脚本合约处于刚部署的干净状态 开箱即用的断言全局注入assertChai和artifacts.require直接调用⚡ 快照加速支持evm_snapshot的链如 Ganache自动快照回滚测试之间零等待 事件解码测试失败时自动打印该测试期间发射的所有事件调试事半功倍Truffle Dashboard 也能为你的本地链提供可视化的交易签名与参数解码能力2. 一键开始最小化测试步骤最快配置方法其实只有三步在项目中创建test/目录放入.js测试文件文件名以.js结尾即可被truffle test识别用artifacts.require引入合约执行命令truffle test一个经典的 MetaCoin 用例可以直接参考仓库中的示例文件 metacoin.jsvar MetaCoin artifacts.require(./MetaCoin.sol); contract(MetaCoin, function (accounts) { it(should put 10000 MetaCoin in the first account, async function () { const instance await MetaCoin.deployed(); const balance await instance.getBalance.call(accounts[0]); assert.equal(balance.valueOf(), 10000, 初始余额不是 10000); }); });关键点解读contract(合约名, 回调)是 Truffle 注入的全局函数回调自动接收accounts账户数组.call()只读不转账不产生 Gas直接调用如sendCoin则发起真实交易assert.equal即 Chai 断言最后传入的字符串是失败时的提示语3. 常见测试套路清单3.1 验证状态变更转账类测试先记录初始值 → 发起交易 → 再读最终值 → 断言差值仓库示例见 metacoin.jsit(should send coin correctly, async function () { const meta await MetaCoin.deployed(); const start (await meta.getBalance.call(accounts[0])).toNumber(); await meta.sendCoin(accounts[1], 10, { from: accounts[0] }); const end (await meta.getBalance.call(accounts[0])).toNumber(); assert.equal(end, start - 10, 发送方余额应减少 10); });3.2 验证异常回滚用 Chai 的assert.isRejected或throws断言非法操作必须失败it(should revert on invalid recipient, async function () { const meta await MetaCoin.deployed(); assert.isRejected(meta.sendCoin(0x0000, 1, { from: accounts[0] })); });3.3 测试前准备before/afterEach标准 Mocha 钩子均可使用例如统一用before做数据初始化beforeEach中重置测试数据。超时时间也可在配置中调整——Truffle 默认before超时 120 秒、单测 300 秒见 TestRunner.ts。4. 失败时如何读日志自动事件解码当某个用例失败Truffle 会调用endTest逻辑自动扫描该测试起始区块之后的日志并解码输出Events emitted during test:→ 逐条打印事件名与参数这一能力由 TestRunner.ts 实现配合--show-events选项还可以在通过时也打印事件。看不懂日志时Truffle Dashboard 的前后对比视图能帮你把裸字节解码为可读参数5. 性能原理快照回滚机制truffle test并非每个用例都重新部署。测试框架在初始化时执行evm_snapshot打快照每个用例结束后evm_revert回滚到初始状态见 TestRunner.ts。因此支持快照的本地链Ganache、Hardhat Network一次部署全程秒级不支持快照的网络自动退化为每次重新迁移部署6. 上手检查清单✅ 测试文件放在test/目录命名为*.js或*.ts✅ 用artifacts.require而非手动读 build 目录✅ 只读操作一律加.call()避免无谓 Gas✅ 断言附带中文提示语失败日志一目了然✅ 在本地测试网develop网络运行享受快照加速⚠️ 提示Truffle Suite 已进入维护/退役阶段见仓库首页说明新项目建议评估迁移方案但已有的 Truffle 项目本文的 MochaChai 测试模式依然完全适用。核心模块路径速查测试框架实现packages/test/src/TestRunner.ts测试入口导出packages/test/src/index.ts断言工具packages/expect/src/index.ts完整测试示例packages/truffle/test/sources/external_compile/test/metacoin.js【免费下载链接】truffle:warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over the years.项目地址: https://gitcode.com/gh_mirrors/tr/truffle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/4 22:55:41

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/5 4:24:57

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/5 4:24:57

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉