javascript - 使用 Truffle 测试 Solidity 合约中的事件

标签 javascript testing solidity truffle

我正在尝试测试事件是否发生,但无论输入是什么,测试都会通过。

我想我在等待结果时做错了什么,结果只是通过测试,因此永远不会断言为假。

我的测试看起来像这样(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 以及它实际上是一个需要解决的 promise 。因为,你不是在这里等待 promise 的实现,看起来控件正在跳转到下一行,这恰好是你的事件触发的。

let actual = await testingOraclize.myFunc({from:acc2})

编辑 1:

移除 truffleAssert 函数中的异步和等待。

关于javascript - 使用 Truffle 测试 Solidity 合约中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53726686/

相关文章:

c# - 这些是什么类型的测试,应该编写它们吗?

javascript - 如何修复异步测试和 Hook 的超时错误,确保调用 "done()";如果返回 Promise,请确保它得到解决

blockchain - 如何在solidity中将uint转换为字符串?

javascript - PHP 中的服务器错误 500

javascript - 将无限数量的参数传递给 sort() 函数

javascript - 是否存在应手动将对象属性设置为未定义的情况?

c# - 使用C#中的Specflow将测试失败消息发送给测试人员

使用 Akka Actor 参数测试方法

ethereum - 获取错误 "creation of HelloWorld errored: TypeError: Cannot convert undefined or null to object"

javascript - 无法读取未定义的属性 'push' -Angular,Firebase