✍️

Hardhat での時間を進めて行うテストの注意点

2022/06/23に公開

問題

Hardhat でのテストコード書いてて、時間を進めて行うテストを書いたんですが、
時間のロジックが影響する後続のテストがすべてコケる現象が起きました。。

時間をすすめるコード

await ethers.provider.send("evm_increaseTime", [12000]);
await ethers.provider.send("evm_mine", []);

テストの固まりとしては it が一番小さい単位で、グループを表すのが describe だと思うのですが、it の中で書いたものが、describe の範囲も超えて引き継がれてしまうみたいでした。
(画像では、release のテストで時間を変更したのですが、その後の時間が影響する releaseAmount や revoke のテストが通らなくなってました。)

対処

進めたら、戻す!!

これで後続のテストもエラーでなくなりました。
マイナス使えば良いみたいです。

他に良い方法あったら教えていただけると嬉しいです!

// 時間すすめる
await ethers.provider.send("evm_increaseTime", [12000]);
await ethers.provider.send("evm_mine", []);

// 確認事項
expect(await VestingContract.releaseAmount(bytesParam)).to.equal(
    ethers.utils.parseEther("1000")
);

// 時間戻す
await ethers.provider.send("evm_increaseTime", [-12000]);
await ethers.provider.send("evm_mine", []);

参考

special thanks!!!

https://ethereum.stackexchange.com/questions/30452/is-there-the-opposite-function-for-evm-increasetime
https://nawoo.hateblo.jp/entry/2021/11/15/223439

Discussion