この記事はmiriwoお一人様 Advent Calendar 2022の3日目の記事です
概要
- テストコードにて時間情報を固定する方法をまとめる。
方法
-
下記の内容をテストコードの各テストメソッド内に記載する。
public function test_〇〇のテスト () { CarbonImmutable::setTestNow(); // テストコード }
-
上記の様に記載することで時間情報を固定する事ができる。
参考
-
公式ドキュメントには下記の様に記載されていた。
Carbon:: setTestNow $testNow = null 「現在」のインスタンスが作成されたときに返される Carbon インスタンス (リアルまたはモック) を設定します。提供されたインスタンスは、具体的には次の条件下で返されます。 - 静的な now() メソッドへの呼び出し。Carbon::now() - null (または空の文字列) がコンストラクターまたは parse() に渡された場合、ex. new Carbon(null) - 文字列「now」がコンストラクターまたは parse() に渡される場合、ex. new Carbon('now') - 目的の時間を含む文字列が Carbon::parse() に渡されたとき。 timezone パラメーターは上記の例から除外されており、その値に関係なくモック値が返されるため、影響がないことに注意してください。 setTestNow() でモックされた瞬間のみ、タイムゾーンは引き続き、フォールバックとして date_default_timezone_get() のパラメーターとして渡されます (setTestNowAndTimezone() を参照)。 テスト インスタンスをクリアするには、null のデフォルト パラメータを使用してこのメソッドを呼び出します。 /!\ このメソッドは単体テストにのみ使用してください。
-
さらにテストで使えそうなメソッドも発見した。
Carbon:: setTestNowAndTimezone $testNow = null, $tz = null 「現在」のインスタンスが作成されたときに返される Carbon インスタンス (リアルまたはモック) を設定します。提供されたインスタンスは、具体的には次の条件下で返されます。 - 静的な now() メソッドへの呼び出し。Carbon::now() - null (または空の文字列) がコンストラクターまたは parse() に渡された場合、ex. new Carbon(null) - 文字列「now」がコンストラクターまたは parse() に渡される場合、ex. new Carbon('now') - 目的の時間を含む文字列が Carbon::parse() に渡されたとき。 また、デフォルトのタイムゾーン (たとえば、date_default_timezone_set() を呼び出す) を 2 番目の引数に合わせます。null の場合は、指定された日付オブジェクトのタイムゾーンに合わせます。 テスト インスタンスをクリアするには、null のデフォルト パラメータを使用してこのメソッドを呼び出します。 /!\ このメソッドは単体テストにのみ使用してください。
参考文献