Substrate 0.9.12版本单元测试中如何访问event的vault_id参数值
Substrate 0.9.12 提取事件字段vault_id的实现方法
你拿到外层Event实例后,通过嵌套模式匹配即可直接提取目标字段,示例代码如下:
基础匹配写法(适合单分支判断场景)
// 请替换为你自己MosaicVault pallet的实际导入路径 use mosaic_vault::Event as MosaicVaultEvent; let e = &frame_system::Pallet::<Test>::events()[0]; let EventRecord { event, .. } = e; // 两层匹配:外层匹配聚合Event的MosaicVault变体,内层匹配pallet内部的VaultCreated事件 if let Event::MosaicVault(MosaicVaultEvent::VaultCreated { vault_id, .. }) = event { // 此处可直接使用vault_id变量,单元测试场景下可直接做断言 assert_eq!(*vault_id, 1); }
多分支匹配写法(适合处理多个事件场景)
如果需要同时处理多种事件类型,可以用match分支实现:
match event { Event::MosaicVault(MosaicVaultEvent::VaultCreated { vault_id, sender, asset_id, reserved }) => { // 可访问该事件的所有字段 println!("vault_id: {}, 发起方: {}", vault_id, sender); }, // 其他事件的处理分支可在此补充 _ => {} }
注意事项
- 必须保证导入的
MosaicVaultEvent和你运行时中聚合的pallet事件定义完全一致,避免匹配失败 - Substrate 0.9.x版本的运行时Event是所有pallet事件的聚合枚举,所以必须先匹配到对应pallet的事件变体,再匹配到具体的事件类型才能访问内部字段
- 单元测试场景下如果确定当前取到的第一个事件就是VaultCreated,也可以直接用
let强制匹配,无需分支判断
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

