Published on

hardhatでtimeに依存するロジックをテストするやり方

Authors
  • avatar
    Name
    ssu
    Twitter

hardhatで時間に依存したロジックをテストするやり方を紹介します。

やり方はとても簡単で、下記のようにevm_increaseTimeで時間を進めて、evm_mineするだけです。

const { ethers } = require('hardhat'); const twoDays = 2 * 24 * 60 * 60; await ethers.provider.send('evm_increaseTime', [twoDays]); await ethers.provider.send('evm_mine');

また、このままだと時間が2日ずれたままになるので、時間を戻さないと他のテストが落ちてしまうことがあります。そこで、進めた日数分 - (マイナス)の値を入れることで、時間を戻すことができます。

const { ethers } = require('hardhat'); const twoDays = 2 * 24 * 60 * 60; await ethers.provider.send('evm_increaseTime', [twoDays]); await ethers.provider.send('evm_mine'); // expect( some test ).to.eq( test) テストを行う // テストが終わったら、時間を戻す await ethers.provider.send('evm_increaseTime', [- twoDays]); await ethers.provider.send('evm_mine');

参考: Time-dependent tests with Hardhat?