使用松露测试Solidity合约中的事件

时间:2018-12-11 14:52:24

标签: javascript testing solidity truffle

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

我想我在等待结果时做错了什么,并且它只是通过测试,因此从未断言是错误的。

我的测试如下所示(acc2是持有地址的const):

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(地址[msg.sender]确实解析为true):

function MyFunc() external payable {
    if (addresses[msg.sender]) {
      emit ParticipateStatus(0, allRunningBets[_betListIndex].betPlacer, msg.sender);
      return;
    }
}

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

我相信您需要为下一行以及其实际需要解决的承诺添加等待。由于您不是在这里等待兑现诺言,因此控件似乎跳到了碰巧触发您事件的下一行。

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

编辑1:

在truffleAssert函数中删除异步并等待。