javascript - 使用 Truffle 测试 Solidity 合约中的事件
问题描述
我正在尝试测试是否发生事件,但无论输入是什么,测试都会通过。
我想我在等待结果时做错了,它只是通过测试,因此永远不会被断言为假。
我的测试看起来像这样(acc2 是一个持有地址的常量):
it('Should emit an event on this call.', async () => {
const testingOraclize = await TestingOraclize.new()
let actual = await testingOraclize.myFunc({from:acc2})
await truffleAssert.eventEmitted(actual , 'ParticipateStatus', async (res) => {
return res._statusCode.toNumber() === 0;
})
});
我在测试文件中的导入是:
const TestingOraclize = artifacts.require('contracts/BetBank.sol');
const assert = require("chai").assert;
const truffleAssert = require('truffle-assertions');
Solidity 合约中的事件
event ParticipateStatus(uint8 _statusCode, address _owner, address _participant);
MyFunc(addresses[msg.sender] 确实解析为 true):
function MyFunc() external payable {
if (addresses[msg.sender]) {
emit ParticipateStatus(0, allRunningBets[_betListIndex].betPlacer, msg.sender);
return;
}
}
我在这里想念什么?
解决方案
我相信您需要为下面的行添加 await 以及它实际上是一个需要解决的承诺。因为,您并没有在这里等待承诺被履行,看起来控件正在跳转到恰好是您的事件触发的下一行。
let actual = await testingOraclize.myFunc({from:acc2})
编辑1:
删除 truffleAssert 函数中的 async 和 await 。
推荐阅读
- python-3.x - Tensorflow:创建用于机器翻译的自定义文本数据集
- visual-studio-code - VSCode扩展如何获取行的最后一个字符的位置
- c# - 如何使程序仅在某个进程打开时才执行操作?
- amazon-web-services - aws iot core Billing API-获取单个设备的账单
- android - Android Camera2 同步图像和元数据
- java - Vert.x 不使用 HttpServerOptions
- sql - AWS IoT 规则 JSON 键上的 SQL 查询以数字开头
- datetime - 比较日期没有按预期工作
- bash - 在一个字符串前面加上另一个字符串时,引号会被删除
- java - 使用 jsonpath 解析数组索引