LoginSignup
0
0

More than 1 year has passed since last update.

laravel CarbonImmutable テスト用に時間を固定する

Last updated at Posted at 2022-12-03

この記事は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 のデフォルト パラメータを使用してこのメ​​ソッドを呼び出します。
    
    /!\ このメソッドは単体テストにのみ使用してください。
    

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0