我的合同有一个到期日期,我想要单元测试,但我不知道如何去做。如果我能嘲笑合同的时间那就太棒了。不过,谷歌搜索并没有提供任何信息。
发布于 2017-04-29 17:00:53
作为一种通用的测试方法,您可以创建另一个只用于调试的合同,合同从生产合同中降下来。第二个合同可以有方法来执行任何事情--例如,将到期日期设置为now。
如果您想具体地处理时间,TestRPC有一个快速转发时间的RPC方法。请注意,您必须以某种方式将它集成到您的测试工具中,因为web3并不随它而来。
发布于 2021-07-20 09:18:26
这是一个相当老的问题,但我想我应该补充一下,对于那些寻找:
您可以使用evm_increaseTime方法,这是通过硬帽子和加纳赫获得的。
下面是以太的一个例子
await ethers.provider.send("evm_increaseTime", [10]) // add 10 seconds
await ethers.provider.send("evm_mine", []) // force mine the next block这里还有web3
web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [10], id: 0})
web3.currentProvider.send({jsonrpc: "2.0", method: "evm_mine", params: [], id: 0})发布于 2017-04-29 16:27:08
我一直在使我的合同从一个具有currTime()函数和testing布尔值的简单契约中派生出来。如果我将testing设置为true,currTime()将返回一个假时间,我可以使用addDays(uint days)之类的函数来操作这个时间。如果testing为false,则currTime()只返回block.timestamp。在我检查时间戳的每一个地方,我都打电话给currTime()。
https://ethereum.stackexchange.com/questions/15596
复制相似问题