dataProviderではCarbon::setTestNowをしてはいけない
概要
タイトル通り。
他のテストクラスに影響を与えてしまう。
ざっくりと詳細
今までテストクラスを一つずつ読み込んで実行してくれているものだと思っていたが、実はそうでなく、
全てのテストクラスとdataProviderを読み込んでから、テストメソッドが実行されている感じだった。(そこそこのPJでテストクラスが大量にある想定)
つまり、 Carbon::setTestNow('2020-07-01 00:00:00');
と書いたら、後続で読み込まれたdataProviderで、Carbon::now()
とすると 2020-07-01 00:00:00
で取得できる。
どうする
特定の日付でデータを作っておきたい場合、固定の日付で入れておけばよいけど、それだと少し手間。
日付に変更を入れたいときにも手間がかかる
public function testProvider() { Carbon::setTestNow('2020-07-01 00:00:00'); $now = Carbon::now();
↑こうしてしまいがちだけど、
public function testProvider() { $now = Carbon::now('2020-07-01 00:00:00');
素直にこうしたら解決した。