gpt4 book ai didi

ethereum - 在测试中处理Solidity合约引发的模式是什么

转载 作者:行者123 更新时间:2023-12-03 22:26:13 25 4
gpt4 key购买 nike

我有一个Solidity合约上的函数,该函数会抛出异常。例如。

   function do(x,y)  {
if ( msg.sender != owner )
throw;
// ...
}

在松露环境中,我有一个类似以下内容的测试js:
//.... part of a promise chain
.then(
function (_bool0) {
assert.isTrue(_bool0,"whoops - should be true");
return contract.do( "okdoke" , {from: accounts[1]} );
}).then(
function (tx_id) {
//..
done();
}
// ...

返回的contract.do()导致导致抛出的情况。在此测试的 松露测试输出中产生以下内容:
Error: VM Exception while executing transaction: invalid JUMP

在这样的测试中处理契约(Contract)功能引发的习惯用法是什么?抛出是正确的行为。

最佳答案

齐柏林飞艇项目是一种出色的方法:

it("should fail to withdraw", async () => {
try {
await receiver.withdrawToken(0x0);
assert.fail('should have thrown before');
} catch(error) {
assertJump(error);
}
});

function assertJump(error) {
assert.isAbove(error.message.search('invalid opcode'), -1, 'Invalid opcode error must be returned');
}

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/test/Ownable.js查看完整示例

关于ethereum - 在测试中处理Solidity合约引发的模式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36595575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com